🧩 Чистое проектирование контроллеров в Symfony с помощью разрешителей аргументов
Статья рассказывает о механизме разрешения аргументов (argument resolving) в Symfony — процессе, который позволяет автоматически преобразовывать параметры запроса в объекты.
Ранее, до Symfony 6.2, для этого использовался SensioFrameworkExtraBundle с аннотацией
Symfony содержит несколько встроенных резолверов, которые помогают обрабатывать разные типы данных — от объектов запросов (RequestValueResolver) и пользовательских сессий (SessionValueResolver) до работы с датами (DateTimeValueResolver) и UID (UidValueResolver).
Создание кастомного аргумент-резолвера
Иногда стандартных резолверов недостаточно, например, если нужно загружать разные типы сущностей из одного маршрута. В статье рассматривается реальный пример с платформы Respawwwn, где есть разные игровые сессии (Daily, Survival, Collection, Party), но требуется один эндпоинт
Чтобы реализовать это, автор создаёт кастомный резолвер (GameSessionValueResolver), который:
✔️ Проверяет, является ли параметр id сущностью типа GameSessionInterface.
✔️ Ищет соответствующую игровую сессию в нескольких репозиториях.
✔️ Возвращает найденный объект, который затем передаётся в контроллер.
✔️ В контроллере этот резолвер подключается с помощью атрибута
Преимущества использования аргумент-резолверов
🔸 Чистый код — контроллеры не загромождены логикой преобразования параметров.
🔸 Гибкость — можно легко менять способ обработки параметров, не изменяя контроллеры.
🔸 Повторное использование — один резолвер можно применять в разных местах.
🔸 Тестируемость — можно отдельно протестировать резолвер без необходимости выполнять HTTP-запросы.
👉 Medium
Статья рассказывает о механизме разрешения аргументов (argument resolving) в Symfony — процессе, который позволяет автоматически преобразовывать параметры запроса в объекты.
Ранее, до Symfony 6.2, для этого использовался SensioFrameworkExtraBundle с аннотацией
@ParamConverter
, но теперь эту функцию выполняет встроенный EntityValueResolver. Это позволяет Symfony автоматически превращать идентификатор из URL (например, /messages/{id}
) в объект соответствующей сущности (например, Message).Symfony содержит несколько встроенных резолверов, которые помогают обрабатывать разные типы данных — от объектов запросов (RequestValueResolver) и пользовательских сессий (SessionValueResolver) до работы с датами (DateTimeValueResolver) и UID (UidValueResolver).
Создание кастомного аргумент-резолвера
Иногда стандартных резолверов недостаточно, например, если нужно загружать разные типы сущностей из одного маршрута. В статье рассматривается реальный пример с платформы Respawwwn, где есть разные игровые сессии (Daily, Survival, Collection, Party), но требуется один эндпоинт
/api/game-sessions/{id}/complete
, который может обработать любую из них.Чтобы реализовать это, автор создаёт кастомный резолвер (GameSessionValueResolver), который:
✔️ Проверяет, является ли параметр id сущностью типа GameSessionInterface.
✔️ Ищет соответствующую игровую сессию в нескольких репозиториях.
✔️ Возвращает найденный объект, который затем передаётся в контроллер.
✔️ В контроллере этот резолвер подключается с помощью атрибута
#[ValueResolver('game_session')]
, что делает код чище и удобнее.Преимущества использования аргумент-резолверов
🔸 Чистый код — контроллеры не загромождены логикой преобразования параметров.
🔸 Гибкость — можно легко менять способ обработки параметров, не изменяя контроллеры.
🔸 Повторное использование — один резолвер можно применять в разных местах.
🔸 Тестируемость — можно отдельно протестировать резолвер без необходимости выполнять HTTP-запросы.
👉 Medium
👍6❤1
Prism
Унифицированный интерфейс для работы с LLM в Laravel. Поддерживает API Anthropic, DeepSeek, Gemini, Groq, Mistral, Ollama, OpenAI и xAI.
🔗 Github
#инструменты
Унифицированный интерфейс для работы с LLM в Laravel. Поддерживает API Anthropic, DeepSeek, Gemini, Groq, Mistral, Ollama, OpenAI и xAI.
🔗 Github
#инструменты
👍10🔥2
Установка Laravel 12 с помощью Docker за 8 минут — полное руководство по установке и настройке
Спидран по установке Laravel в докер, после чего сразу можно начать разработку или тестирование кода
👉 Видео
Библиотека пхпшника #буст
Спидран по установке Laravel в докер, после чего сразу можно начать разработку или тестирование кода
👉 Видео
Библиотека пхпшника #буст
YouTube
Install Laravel 12 with Docker in 8 Minutes - Full Setup & Configuration Guide #laravel #docker
Source code link: https://www.getmakedigital.com/blogs/laravel-12-development/install-laravel-12-with-docker
In this video, I'll show you how to install Laravel 12 with Docker in just 8 minutes. Whether you're a beginner or have some experience with Docker…
In this video, I'll show you how to install Laravel 12 with Docker in just 8 minutes. Whether you're a beginner or have some experience with Docker…
🥱11👍4😁3🌚2⚡1
💻 Переворачиваем биты 32-битного числа в PHP
Bitwise-операции 🔢— это основа низкоуровневого программирования, криптографии и дебага. Одна из распространённых задач — инверсия битов 32-битного беззнакового числа: заменяем все 0 на 1 и наоборот.
📌 Что такое 32-битное беззнаковое число?
Оно хранит значения от
🔹 Как инвертировать биты в PHP?
PHP поддерживает побитовые операции с операторами ~ (NOT) и ^ (XOR).
❌
✅
🔍 Примеры работы кода
✅ Вход: 0
🔹 Бинарный вид: 00000000000000000000000000000000
🔹 Инверсия: 11111111111111111111111111111111
🔹 Десятичный результат: 4294967295
✅ Вход: 2147483647
🔹 Бинарный вид: 01111111111111111111111111111111
🔹 Инверсия: 10000000000000000000000000000000
🔹 Десятичный результат: 2147483648
Библиотека пхпшника #буст
Bitwise-операции 🔢— это основа низкоуровневого программирования, криптографии и дебага. Одна из распространённых задач — инверсия битов 32-битного беззнакового числа: заменяем все 0 на 1 и наоборот.
📌 Что такое 32-битное беззнаковое число?
Оно хранит значения от
0
до 4294967295
(2³² — 1
). В отличие от знаковых чисел, здесь нет отрицательных значений.🔹 Как инвертировать биты в PHP?
PHP поддерживает побитовые операции с операторами ~ (NOT) и ^ (XOR).
❌
~
меняет все биты, но из-за особенностей PHP приводит к отрицательным значениям.✅
^
(XOR) с 0xFFFFFFFF даёт правильный результат.🔍 Примеры работы кода
✅ Вход: 0
🔹 Бинарный вид: 00000000000000000000000000000000
🔹 Инверсия: 11111111111111111111111111111111
🔹 Десятичный результат: 4294967295
✅ Вход: 2147483647
🔹 Бинарный вид: 01111111111111111111111111111111
🔹 Инверсия: 10000000000000000000000000000000
🔹 Десятичный результат: 2147483648
Библиотека пхпшника #буст
😁5🌚3
Что умеет Rector: пишем кастомные правила для автоматизации рефакторинга PHP-проектов
Если вам часто приходится сталкиваться с рефакторингом старых PHP-проектов, при этом их потребности выходят за пределы штатного набора правил, эта статья для вас.
🔗 Хабр
Библиотека пхпшника
Если вам часто приходится сталкиваться с рефакторингом старых PHP-проектов, при этом их потребности выходят за пределы штатного набора правил, эта статья для вас.
🔗 Хабр
Библиотека пхпшника
👍7❤1
📊 Тестовые задания — любовь или боль?
По данным исследования, 81% IT-специалистов в России просто игнорируют вакансии с тестовыми заданиями. Программисты оказались самыми «неприступными» — только 19% согласны их выполнять.
😆 Только тестировщики, которые сами по долгу службы гоняют тесты, готовы пройти их ради работы (63%). Профессиональная эмпатия?
Как вы относитесь к тестовым заданиям при трудоустройстве? Делитесь мнением в комментах! 👇
🔥 — готов(-а) выполнить, если вакансия интересная
👍 — только если тестовое оплачивается
🌚 — игнорю такие вакансии сразу
🤔 — я уже делал(-а) тестовое, а его использовали в проде бесплатно
Библиотека пхпшника #междусобойчик
По данным исследования, 81% IT-специалистов в России просто игнорируют вакансии с тестовыми заданиями. Программисты оказались самыми «неприступными» — только 19% согласны их выполнять.
😆 Только тестировщики, которые сами по долгу службы гоняют тесты, готовы пройти их ради работы (63%). Профессиональная эмпатия?
Как вы относитесь к тестовым заданиям при трудоустройстве? Делитесь мнением в комментах! 👇
🔥 — готов(-а) выполнить, если вакансия интересная
👍 — только если тестовое оплачивается
🌚 — игнорю такие вакансии сразу
🤔 — я уже делал(-а) тестовое, а его использовали в проде бесплатно
Библиотека пхпшника #междусобойчик
🔥47🌚26👍12😁2🤔2
💻 Подборка новостей по PHP за неделю:
🔎 Релиз CakePHP 4.5.10
Команда CakePHP объявила о выходе версии 4.5.10. Это технический релиз, исправляющий несколько проблем, о которых сообщило сообщество.
GitHub
🔎 Расширение JetBrains Xdebug Helper для браузера
JetBrains представила официальное расширение Xdebug Helper для Chrome, обеспечивающее беспроблемную отладку PHP-кода.
🔎 Laravel 12.3: Новый тип приведения JSON Unicode
Команда Laravel выпустила версию 12.3.0, включающую новый тип приведения JSON Unicode, проверку статуса связанных хранилищ в команде about, поддержку нативных типов JSON и JSONB в схемах SQLite и другие улучшения.
🔎 Неделя Symfony #951 (17–23 марта 2025 года)
На этой неделе в предстоящей версии Symfony 7.3 обновлена конфигурация по умолчанию для исключения расширений контейнера, сущностей и сообщений Messenger при регистрации сервисов, а также внесены изменения, связанные с сбросом сервисов.
Библиотека пхпшника #свежак
🔎 Релиз CakePHP 4.5.10
Команда CakePHP объявила о выходе версии 4.5.10. Это технический релиз, исправляющий несколько проблем, о которых сообщило сообщество.
GitHub
🔎 Расширение JetBrains Xdebug Helper для браузера
JetBrains представила официальное расширение Xdebug Helper для Chrome, обеспечивающее беспроблемную отладку PHP-кода.
🔎 Laravel 12.3: Новый тип приведения JSON Unicode
Команда Laravel выпустила версию 12.3.0, включающую новый тип приведения JSON Unicode, проверку статуса связанных хранилищ в команде about, поддержку нативных типов JSON и JSONB в схемах SQLite и другие улучшения.
🔎 Неделя Symfony #951 (17–23 марта 2025 года)
На этой неделе в предстоящей версии Symfony 7.3 обновлена конфигурация по умолчанию для исключения расширений контейнера, сущностей и сообщений Messenger при регистрации сервисов, а также внесены изменения, связанные с сбросом сервисов.
Библиотека пхпшника #свежак
👍2❤1
Forwarded from Библиотека задач по PHP | тесты, код, задания
Что выведет данный код?
Anonymous Quiz
40%
установленную версию PHP
36%
Too few arguments to function AccessedViaMagic::getPHPVersion(), 0 passed and exactly 1 expected
16%
PHP Arrays cannot be accessed as callable
9%
First array member is not a valid class name or object
👏1
🚀 Exceptional Validation — новый подход к валидации данных в Symfony
Теперь валидация бизнес-правил смещается от использования атрибутов и кастомных валидаторов, являющихся частью инфраструктурного кода, к применению бизнес-исключений непосредственно в клиентском коде.
Преимущества такого подхода:
🔸 Упрощение валидации: Отказ от сложных механизмов, таких как группы валидации и кастомные expressions, делает процесс проверки данных более прозрачным и управляемым.
🔸 Гибкость в различных контекстах: Возможность легко адаптировать логику валидации в зависимости от конкретного контекста без необходимости создания сложных конструкций.
🔸 Совместимость: Библиотека интегрируется с Symfony Messenger и amphp, обеспечивая бесшовную работу в существующих проектах.
🔸 Стандартные сообщения об ошибках: После обработки исключений библиотека возвращает список нарушений ограничений (constraint violations) в формате Symfony Validator.
🔗 Github
Библиотека пхпшника #инструменты
Теперь валидация бизнес-правил смещается от использования атрибутов и кастомных валидаторов, являющихся частью инфраструктурного кода, к применению бизнес-исключений непосредственно в клиентском коде.
Преимущества такого подхода:
🔸 Упрощение валидации: Отказ от сложных механизмов, таких как группы валидации и кастомные expressions, делает процесс проверки данных более прозрачным и управляемым.
🔸 Гибкость в различных контекстах: Возможность легко адаптировать логику валидации в зависимости от конкретного контекста без необходимости создания сложных конструкций.
🔸 Совместимость: Библиотека интегрируется с Symfony Messenger и amphp, обеспечивая бесшовную работу в существующих проектах.
🔸 Стандартные сообщения об ошибках: После обработки исключений библиотека возвращает список нарушений ограничений (constraint violations) в формате Symfony Validator.
🔗 Github
Библиотека пхпшника #инструменты
😁2❤1
🎭 Dev Memes: 1 апреля, а баги всё те же
Сегодня день официально разрешённого троллинга — и мы не могли пройти мимо. Собрали подборку мемов для Пхпшника, которые вызывают лёгкое желание уволиться.
👉 Всё это — из нашего мемного канала «Библиотека IT-мемов»
Библиотека пхпшника
Сегодня день официально разрешённого троллинга — и мы не могли пройти мимо. Собрали подборку мемов для Пхпшника, которые вызывают лёгкое желание уволиться.
👉 Всё это — из нашего мемного канала «Библиотека IT-мемов»
Библиотека пхпшника
👍7👾1
Forwarded from Библиотека шарписта | C#, F#, .NET, ASP.NET
💾 Как выбрать стратегию кэширования: разбор 7 популярных алгоритмов
Кешировать нужно с умом. И нет, LRU — не серебряная пуля.
В статье вас ждёт разбор алгоритмов: LRU, LFU, FIFO и другие
– Примеры, где каждый работает лучше
– Плюсы и минусы подходов
– Практические советы по выбору стратегии
Если проектируете систему с большими нагрузками или оптимизируете производительность — материал будет как раз.
➡️ Читать статью
🐸 Библиотека шарписта
Кешировать нужно с умом. И нет, LRU — не серебряная пуля.
В статье вас ждёт разбор алгоритмов: LRU, LFU, FIFO и другие
– Примеры, где каждый работает лучше
– Плюсы и минусы подходов
– Практические советы по выбору стратегии
Если проектируете систему с большими нагрузками или оптимизируете производительность — материал будет как раз.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1