Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.34K photos
20 videos
26 files
4.03K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Шаблоны проектирования PHP: Active Record

Active Record - это шаблон проектирования, который включает в себя класс с методами сохранения данных и бизнес-логики. Однако он нарушает принцип единственной ответственности, так как класс сочетает в себе множество обязанностей. Для решения этой проблемы предлагается создать родительский класс, который реализует методы сохранения данных универсальным способом.
✔️Этот подход называется Layer Supertype.

🔎Приведен пример работы с Active Record. В данном примере создается класс Product, который содержит методы для работы с продуктами в базе данных SQLite. Класс имеет статическое свойство conn для хранения соединения с базой данных и переменную data для хранения данных продукта.

Класс Product содержит методы для выполнения различных операций с базой данных, таких как поиск продукта по ID, выборка всех продуктов с возможностью фильтрации, удаление продукта и сохранение (включая добавление и обновление).

Приведенный код также включает примеры тестирования методов:
🟠INSERT
🟠UPDATE
🟠выборка всех продуктов из базы данных.
🥱7👍5
Forwarded from Библиотека программиста | программирование, кодинг, разработка
👨‍🎓Подборка бесплатных инструментов, курсов и ресурсов для освоения SQL и баз данных

✏️ Полный курс по базам данных НИУ ВШЭ, СПБПУ и центра CS, который познакомит с методами структурированного хранения данных, основами SQL, принципами использования баз данных в приложениях и многим другим
✏️ SQLBolt — серия интерактивных уроков и упражнений для изучения SQL прямо в браузере
✏️ PostgreSQL Tutorial — исчерпывающее пособие по PostgreSQL
✏️ The Internals of PostgreSQL — полезный ресурс для изучения внутреннего устройства PostgreSQL
✏️ DB-Engines — коллекция полезной информации о реляционных СУБД и NoSQL
✏️ SQLZoo — подборка учебных пособий как для новичков, так и для профи
✏️ SQL Tutorial — видеогайд по SQL от FreeCodeCamp
✏️ PopSQL — инструмент для совместного изучения SQL и выполнения SQL-запросов
👍9🔥2
Совет по безопасности: увеличьте количество проходов bcrypt

Статья обсуждает важность безопасности в веб-разработке, фокусируясь на механизме хеширования паролей. Она подчеркивает увеличение вычислительной мощности компьютеров и необходимость постоянного обновления методов хеширования для защиты от брутфорс-атак.

Здесь рассматриваются изменения, внесенные в Laravel, включая увеличение количества проходов bcrypt с 10 до 12. Это увеличение замедляет процесс хеширования, обеспечивая более высокий уровень безопасности.
👍2
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👍2😁1
Использование Hashid с Laravel (вместо UUID)

Статья обсуждает различные методы создания идентификаторов в базах данных, сосредотачиваясь на сравнении увеличиваемых целочисленных идентификаторов с уникальными строковыми идентификаторами (UUIDs) и методом Hashid.

Автор исследует преимущества и недостатки каждого метода и предоставляет решение в виде использования Hashid - метода для генерации коротких и уникальных строковых идентификаторов из чисел.

В статье также рассматривается реализация Hashid в Laravel-приложении
👍4👾3🥱1
#дайджест #phpdevjob

Вакансии недели для джунов 👨🏻‍🏫

PHP-разработчик в NeoFamily
Санкт-Петербург. Онлайн-школа по подготовке к ЕГЭ.
Подробнее

PHP-программист в ЛЕКО
Тверь. Разработка крупных интернет-проектов.
Подробнее

Программист PHP в SRLab
Севастополь. Разработка индивидуальных решений для бизнеса.
Подробнее

Junior PHP-программист в Скобеев и Партнеры
Тамбов. ИТ-услуги и эталонный сервис.
Подробнее

Программист PHP в ИНТАСК
Воронеж. Разработка ПО для электронной торговли.
Подробнее

Понравились вакансии?
👍 — да
👎 — нет
🥱8👍2
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
😁3👍2
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы

🐘PHP

Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие профильные каналы

Библиотека фронтендера
Библиотека шарписта
Библиотека мобильного разработчика
Библиотека хакера
Библиотека devops’a
Библиотека тестировщика

💼Каналы с вакансиями

Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
Вакансии по DevOps & SRE
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook
🔸Instagram
🥱21👍1🌚1
Перевод сущностей в EasyAdmin с помощью DoctrineBehaviors

В данной статье рассматривается способ перевода сущностей в EasyAdmin. Создается сущность "Article", где можно перевести заголовок, слаг и содержание на несколько языков, а также добавить возможность фильтрации по переводимым полям.
👍3
Какие процессы происходят, когда пользователь вводит в браузере URL?

Когда пользователь вводит URL в браузере, происходит следующая последовательность процессов:

1. Парсинг URL: Браузер анализирует введенный URL, чтобы выделить протокол, доменное имя и путь к ресурсу.

2. DNS-поиск: Браузер отправляет запрос к DNS-серверу для получения IP-адреса, связанного с доменным именем. DNS-сервер возвращает IP-адрес браузеру.

3. Установка TCP-соединения: Браузер устанавливает TCP-соединение с веб-сервером, используя полученный IP-адрес и порт (обычно порт 80 для HTTP или порт 443 для HTTPS).

4. Отправка HTTP-запроса: Браузер отправляет HTTP-запрос на сервер, включая метод запроса (GET, POST и т.д.), заголовки и URI (Uniform Resource Identifier), который содержит запрошенный ресурс.

5. Обработка и выполнение запроса на сервере: Веб-сервер получает HTTP-запрос, выполняет обработку и обращается к соответствующему приложению или файлу. На этом этапе сервер может также взаимодействовать с базой данных или другими серверами для получения данных, необходимых для формирования ответа.

6. Подготовка HTTP-ответа: Сервер формирует HTTP-ответ, включающий статус запроса, заголовки и содержимое. Код состояния (например, 200 для успешного запроса) указывает на результат обработки запроса.

7. Передача HTTP-ответа: Сформированный HTTP-ответ передается обратно по TCP-соединению на браузер клиента.

8. Обработка HTTP-ответа: Браузер получает HTTP-ответ, анализирует статус запроса и заголовки. Если запрос был успешным, браузер начинает загружать и отображать содержимое ответа (HTML, CSS, JavaScript, изображения и т.д.).

9. Рендеринг и отображение: Браузер обрабатывает полученное содержимое, выполняет интерпретацию HTML, применяет стили CSS, обрабатывает скрипты JavaScript и, в конечном итоге, отображает запрошенную веб-страницу на экране пользователя

#вопросы_с_собеседований
👍25🥱5🔥1
Решение проблем масштабирования PHP

Команда разработчиков столкнулась с проблемой памяти при экспорте данных в Excel файлы в PHP-проекте. Проблема заключалась в том, что каждый фоновый задача открывала файл, добавляла порцию записей и закрывала файл, что приводило к увеличению потребления памяти.

После многих неудачных попыток решить проблему в PHP, команда решила переписать этот процесс на языке программирования Rust.
Rust был выбран из-за своей эффективности в управлении памятью, поддержки параллельности и безопасности в работе с потоками.

После преодоления кривого обучения команда смогла успешно реализовать новую систему экспорта, которая управляет памятью более эффективно и обеспечивает высокую производительность при обработке больших объемов данных. Для связи между PHP и Rust используется Redis и HTTP-вебхуки.
👍7🥱1
Verify Domain

PHP Verify Domain позволяет проверить принадлежность домена, проверив содержимое загруженного файла, метатеги и TXT-записи DNS. Вы могли наблюдать подобное поведение при проверке домена в таких сервисах, как "Google Search Console" и ...

Подробнее о пакете Verify Domain вы можете узнать из этой статьи.
🌚21
85% разработчиков готовятся к собеседованиям

Мы опросили студентов Proglib, которые устроились в международные компании, чтобы выяснить, как у них получилось успешно пройти собеседование?

И оказалось, что 85% из них целенаправленно изучали алгоритмы и тренировались решать алгоритмические задачки, чтобы успешно справится с техническим собеседованием.

Тренироваться можно самостоятельно, но если у вас не хватает мотивации заниматься регулярно, то рекомендуем курс «Алгоритмы и структуры данных»‎.

Подробности здесь – https://proglib.io/w/3b4ab5e4

А также до 15 октября по промокоду PROG20OCT вы получите дополнительную скидку 20%.

⚡️Начните с бесплатной части уже сегодня – https://proglib.io/w/3b4ab5e4
🥱52👍1
Match vs Switch

В статье рассматривается нововведение в PHP 8 - выражение match, сравнивая его с уже существующим оператором switch. Статья подчеркивает основные различия между match и switch, включая возможность match возвращать значение, использование break в switch, обработку ошибок и строгое сравнение в match. Кроме того, статья подчеркивает, что match и switch имеют различные сценарии использования и не являются взаимозаменяемыми.
🥱9👍31
Stat cache - это механизм кэширования результатов низкоуровневых операций чтения информации о файлах (например, права доступа, размер, время последнего изменения) в PHP. Когда вы вызываете несколько операций работы с файловой системой на одном и том же файле быстро подряд, PHP использует stat cache для оптимизации производительности.

Основной момент, который стоит отметить, заключается в том, что stat cache кэширует информацию только для одного файла. Если PHP выполняет низкоуровневую операцию на файле и он не был в кэше ранее, он перезапишет предыдущие данные, связанные с предыдущим файлом.

Статья также предоставляет пример того, как могла бы быть реализована stat cache на уровне PHP, и указывает на важность знания о том, как она работает. Она также подчеркивает, что для избежания ошибок в PHP коде, связанных с этим механизмом, иногда приходится использовать функцию clearstatcache(), чтобы очистить кэш.
👍91
Persistent-request библиотека для надежных запросов

В этой статье рассказывается о создании библиотеки PersistentRequest для гарантированного выполнения запросов и их обработки в среде Laravel.

🎯 Цели создания библиотеки:

Работа с Laravel
Легкость и гибкость использования
Минимум зависимостей

🔍 Что вы узнаете:

Как установить библиотеку через Composer
Инициализация сервиса и создание объектов запросов
Гарантированное выполнение запросов с возможностью повтора
Гибкая настройка логики обработки ответов

🌟 Преимущества использования:

Гарантированное выполнение запросов в асинхронной среде
Легкость настройки и минимум зависимостей
Пользовательская обработка ответов и возможность повторных попыток
5👍1
Объявления типов в Symfony 7.0

Статья рассказывает о длительной инициативе Symfony по добавлению всех возможных объявлений типов в PHP в свой код. Этот процесс начался в Symfony 5, продолжился в Symfony 6 и приближается к завершению в Symfony 7.0.

Добавление объявлений типов требует осторожности, так как это нарушает обратную совместимость в большинстве случаев. В соответствии с процессом выпуска Symfony, такие изменения разрешены только в мажорных версиях (например, 6.0 и 7.0).

Этот процесс был разделен на три мажорных версии, чтобы уменьшить влияние на библиотеки, использующие компоненты Symfony. Это также дает команде кора достаточно времени для создания необходимых инструментов и внимательного рассмотрения каждого изменения.

Цель Symfony 7.0 - добавить каждое возможное объявление типа в PHP. Она включает в себя:

🟠Добавление типов возвращаемых значений для всех методов, которые были пропущены или упущены в Symfony 6.0;
🟠Добавление типа 'void' там, где это применимо;
🟠Добавление типов для всех свойств класса, включая публичные и защищенные свойства.
18👍3