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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Как работает HTTP Kernel в Symfony?

HTTP Kernel (HTTP ядро) в Symfony — это ключевой компонент фреймворка, отвечающий за обработку HTTP-запросов и формирование ответов. Он реализует шаблон проектирования Front Controller и координирует весь жизненный цикл запроса и ответа.

Основной процесс работы HTTP Kernel

1. Получение запроса:
Входной файл (index.php) получает HTTP-запрос и передаёт его в ядро.

2. Маршрутизация:
Ядро использует компонент маршрутизации, чтобы определить, какой маршрут соответствует запросу, и какой контроллер должен быть вызван.

3. Вызов контроллера:
После определения маршрута вызывается соответствующий контроллер, который обрабатывает запрос и возвращает данные.

4. Формирование ответа:
Контроллер возвращает объект ответа, который может быть модифицирован дополнительными обработчиками (например, добавление заголовков).

5. Отправка ответа:
HTTP ядро отправляет готовый ответ обратно клиенту.

6. Постобработка:
После отправки ответа запускаются задачи, которые можно выполнять асинхронно (например, логирование или очистка данных).

Основные компоненты
🔹 Запрос и ответ:
Symfony использует объект запроса, который содержит все данные HTTP-запроса (заголовки, параметры, тело и т.д.), и объект ответа, который формирует конечный HTTP-ответ.

🔹 Маршрутизация:
Компонент маршрутизации сопоставляет URL запроса с маршрутами, указанными в конфигурации, и определяет, какой контроллер и параметры использовать.

🔹 Контроллер:
Контроллер — это метод, который выполняет бизнес-логику, принимает параметры из запроса и возвращает ответ.

🔹 События:
Во время обработки запроса ядро генерирует события, на которые могут подписываться обработчики. Это позволяет изменять запрос, контроллер или ответ на разных этапах обработки.

🔹 Постобработка:
После того как ответ отправлен клиенту, могут выполняться задачи, которые не требуют немедленного завершения (например, отправка логов или очистка кэша).

Этапы обработки запроса
✔️Клиент отправляет HTTP-запрос.
✔️Ядро принимает запрос и вызывает маршрутизацию.
✔️Контроллер выполняет бизнес-логику.
✔️Генерируется HTTP-ответ.
✔️Ответ модифицируется при необходимости (например, добавляются заголовки).
✔️Готовый ответ отправляется клиенту.
✔️Выполняются завершающие задачи.

#вопросы_с_собеседований
👍10🥰31
Почему вам стоит задуматься о переходе на PHP 8.4?

В этой статье на медиуме рассматриваются основные причины, по которым вы можете захотеть обновить свои PHP-проекты до версии 8.4.
👍5
Будьте осторожны при использовании whereYear; даже если ваш столбец проиндексирован, он не будет использован, и база данных выполнит полное сканирование таблицы. Вместо этого лучше использовать диапазоны 🚀.
👍11
«Наконец я попробовал Pest для PHP и Laravel, а затем перешел на него.»

Pest — это современный инструмент для тестирования в PHP, созданный в 2021 году Нуну Мадуро, инженером Laravel. Pest быстро стал популярным благодаря своей интеграции с экосистемой Laravel и упрощению процесса тестирования. Основанный на PHPUnit, Pest сохраняет его мощь, но добавляет более удобный и лаконичный синтаксис.

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

Важной частью успеха Pest стала его привлекательная консоль, которая предоставляет четкий и понятный вывод тестов. Pest также поддерживает большинство возможностей PHPUnit, включая провайдеры данных, хуки (аналог setUp и tearDown), фильтрацию и группировку тестов. Однако Pest пошел дальше, предложив функции, которые делают его уникальным:

🔧 Тестирование архитектуры. Позволяет задавать архитектурные правила для кода, например, обязательное использование строгого режима.
📸 Снапшоты. Удобны для проверки неизменности данных.
🚀 Стресс-тестирование. Полезно для проверки производительности приложений.
🛠️ Плагины. Pest активно поддерживает расширяемость, что позволяет добавлять новые функции через сторонние модули.

Эволюция Pest связана с его глубокой интеграцией в Laravel-сообщество. Многие популярные проекты, такие как Spatie, Livewire и Filament, перешли на Pest, что сделало его стандартом де-факто в экосистеме Laravel. Благодаря обратной совместимости с PHPUnit, переход на Pest не требует кардинального изменения существующих тестов, что облегчает его внедрение.

Таким образом, Pest стал не просто альтернативой PHPUnit, а его современной интерпретацией с улучшенным синтаксисом и расширенными возможностями. Если вы разрабатываете на PHP и еще не пробовали Pest, его простота и мощь делают его достойным внимания инструментом.
👍15😁75🌚1
Привет!

Мы хотели бы поближе с вами познакомиться! Будем очень признательны за ваши ответы на следующие вопросы!
Opis Closure 4.0.0

Этот мажорный релиз представляет собой полную переработку библиотеки и обеспечивает поддержку функций PHP 8.x, таких как атрибуты, перечисления, свойства read-only, именованные параметры и т.д.

#новость
👍3
Что такое OWASP?

OWASP — это акроним, расшифровывающийся как Open Web Application Security Project.

OWASP — это некоммерческая организация, которая занимается исследованием и обеспечением безопасности веб-приложений. Она обладает обширным контентом, включающим методологии, инструменты, стандарты и руководства по обеспечению безопасности веб-приложений.

В рамках OWASP разработаны множество проектов, включающих в себя руководства по безопасности, топ-10 уязвимостей веб-приложений, инструменты для сканирования и тестирования безопасности, образцы кода и многое другое.

Знание OWASP и умение применять его рекомендации является важным для php-разработчика, так как помогает защитить веб-приложения от распространенных уязвимостей, таких как инъекции SQL, межсайтовый скриптинг (XSS), утечка конфиденциальной информации и другие.
👍4🥱4
Эффективный рендеринг изображений Base64 в PDF-файлах Laravel с помощью DomPDF

При создании PDF с помощью библиотеки DomPDF в Laravel часто возникают сложности с обработкой изображений. Основная проблема — высокое потребление памяти, особенно если PDF содержит множество изображений. Вот решение, которое позволяет эффективно встраивать изображения в PDF, минимизируя нагрузку на память.

Проблема
DomPDF требует, чтобы изображения были встроены в HTML в виде base64-строк. Однако загрузка нескольких изображений в память одновременно может быстро превысить лимит, установленный для PHP. Это особенно критично при генерации больших документов, таких как каталоги или отчёты.

Решение
Предложенный подход включает:

🔸Обработку изображений небольшими частями (чтобы избежать переполнения памяти).
🔸Гибкую обработку отсутствующих изображений.
🔸Поддержку как локальных, так и удалённых файлов.
🔸Преобразование изображений в формат base64, совместимый с DomPDF.

Основные элементы решения
1. Управление памятью
Перед началом обработки устанавливается разумный лимит памяти, например, 256 МБ. Это позволяет избежать чрезмерного использования ресурсов сервера, оставаясь в рамках допустимых ограничений.

2. Постепенная загрузка изображений
Вместо того чтобы загружать весь файл в память сразу, изображение читается по частям, например, блоками по 8 КБ. Такой подход предотвращает резкий рост потребления памяти, что особенно полезно для работы с большими изображениями.

3. Обработка отсутствующих изображений
Если файл изображения не найден, вместо ошибки возвращается base64-код прозрачного 1x1 пикселя. Это позволяет избежать сбоев в процессе генерации PDF.
1👍1
Чтобы использовать литеральные символы внутри регекса, можно воспользоваться функцией preg_quote(): она добавляет обратную косую черту перед каждым специальным символом в строке. Не забудьте использовать второй аргумент, который может содержать любой произвольный разделитель.

Другой вариант — использовать внутри регекса символы \Q и \E: они превращают все специальные символы в буквенное значение.
👍9