<? phpukraine СТАТТІ
⌕Пошук по платформі

Статті про Symfony українською

Dependency injection, Doctrine, Messenger і межі шарів. Матеріали для тих, хто веде великі Symfony-застосунки.

НАЙНОВІША SYMFONY 30 вересня 2026

AssetMapper: фронтенд у Symfony без Node і збирання

Import map замість бандла: браузер сам розв'язує `import 'chart.js'`, а Symfony лише роздає файли з дайджестом у назві. Розбираємо, що саме рендерить `importmap()`, як пакети з jsDelivr опиняються в `assets/vendor/`, як сюди вписуються CSS і Tailwind без Node, який вигляд має деплой після `asset-map:compile` і в яких випадках Encore чи Vite все одно лишаються правильною відповіддю.

РP Редакція phpukraine · 7 хв читання
6 статей
SYMFONY 30 вересня 2026 AssetMapper: фронтенд у Symfony без Node і збирання Import map замість бандла: браузер сам розв'язує `import 'chart.js'`, а Symfony лише роздає файли з дайджестом у назві. Розбираємо, що саме рендерить `importmap()`, як пакети з jsDelivr опиняються в `assets/vendor/`, як сюди вписуються CSS і Tailwind без Node, який вигляд має деплой після `asset-map:compile` і в яких випадках Encore чи Vite все одно лишаються правильною відповіддю. РP Редакція phpukraine · 7 хв ·AssetMapper ·Фронтенд SYMFONY 27 вересня 2026 Symfony Scheduler замість cron: періодичні задачі як повідомлення Crontab живе поза репозиторієм, не читається в code review і ніяк не тестується. Symfony Scheduler переносить розклад у код: `RecurringMessage`, воркер `messenger:consume scheduler_default`, lock проти дублювання на кількох машинах, stateful-режим для пропущених запусків і звичайні юніт-тести, які перевіряють дати наступних запусків. РP Редакція phpukraine · 8 хв ·Scheduler ·Messenger ·Cron SYMFONY 15 вересня 2026 Форми Symfony чи DTO з валідатором: як не потонути у FormType `#[MapRequestPayload]` перетворює тіло запиту на типізований об'єкт і валідує його без жодного FormType, і для JSON-ендпоінтів це майже завжди правильний вибір. Але щойно з'являються вкладені колекції з кнопкою «додати рядок», залежні селекти й рендеринг помилок у Twig, форми повертають собі перевагу. Розбираємо, що саме робить резолвер під капотом, де він мовчки віддає 404 замість 422, як віддати формі й API один і той самий набір constraints і чому тест на DTO пишеться за три рядки, а на FormType - за тридцять. РP Редакція phpukraine · 7 хв ·Forms ·DTO ·Validator SYMFONY 14 вересня 2026 Авторизація в Symfony: voters, атрибути IsGranted і межа з бізнес-правилами Роль відповідає на питання «хто ти», voter - на питання «чи можна тобі зробити це саме з цим об'єктом». Розбираємо voter на прикладі редагування чужої вакансії, `CacheableVoterInterface` і чому без нього воутер викликається завжди, `#[IsGranted]` із subject та Expression, статус 404 замість 403, і де проходить межа, за якою перевірка перестає бути авторизацією і стає бізнес-правилом. РP Редакція phpukraine · 8 хв ·Security ·Voters ·Авторизація SYMFONY 4 вересня 2026 Теговані сервіси й compiler passes: розширення без правки чужого коду Точка розширення в Symfony — це не інтерфейс і не абстрактний клас, а тег у контейнері. Розбираємо, як тег перетворюється на `iterable` чи `ServiceLocator` у конструкторі, коли атрибутів уже не вистачає і треба писати compiler pass, у якому порядку проходи виконуються, чому ваш сервіс зникає до того, як пас до нього дійде, і як усе це дебажити через `debug:container`. РP Редакція phpukraine · 9 хв ·DI-контейнер ·Compiler passes SYMFONY 3 вересня 2026 Messenger і outbox: як не втратити подію між транзакцією і брокером Класична дірка: сутність збережена, а повідомлення в брокер не пішло — або пішло, а транзакція відкотилась. Symfony Messenger вміє закривати її без окремої бібліотеки: Doctrine transport пише повідомлення тим самим з'єднанням, що й ваші сутності, тож INSERT потрапляє в ту саму транзакцію. Розбираємо конфіг, ретраї, failed transport, дедуплікацію на боці споживача і випадки, коли весь цей апарат вам не потрібен. РP Редакція phpukraine · 9 хв ·Messenger ·Outbox ·Doctrine