> Как устроен жизненный цикл запроса в Symfony (PHP)
Уровень: senior · Роль: backend · Язык: PHP · Категория: Технические вопросы
Компании: Travelata
Стек: PHP
> Пример ответа
Жизненный цикл запроса в Symfony проходит через несколько ключевых этапов, начиная с входящего HTTP-запроса и заканчивая ответом клиенту. Вот его краткая схема:
-
Входной файл (Front Controller) - обычно
public/index.php. Symfony загружает автозагрузчик Composer и создает экземплярKernel(например,AppKernelилиKernelиз Symfony Flex). -
Создание Request - из глобальных переменных PHP (
$_GET,$_POST,$_SERVER,$_COOKIE) формируется объектSymfony\Component\HttpFoundation\Request. Это происходит в методеKernel::handle(). -
Обработка через Kernel - ядро последовательно вызывает:
- Bootstrap - загрузка конфигурации, сервисов, бандлов.
- Event Dispatcher - запускается событие
kernel.request. Здесь работают слушатели, например, проверка авторизации (Firewall) или обработка подзапросов. - Router - маршрутизатор (обычно
RouterListener) сопоставляет URL с контроллером и параметрами. Если маршрут не найден, выбрасывается исключение 404. - Controller Resolver - определяет, какой класс и метод контроллера вызвать (с учетом DI и аргументов).
- Выполнение контроллера - возвращает объект
Response(например,JsonResponseилиRedirectResponse). - Событие
kernel.view- если контроллер вернул неResponse, а массив (для шаблонов), то слушатель преобразует его вResponseчерез Twig. - Событие
kernel.response- финальная модификация ответа (например, добавление заголовков, кэширование). - Событие
kernel.finish_request- очистка после обработки.
-
Отправка ответа - метод
$response->send()выводит заголовки и тело ответа в PHP-поток. -
Завершение (Shutdown) - событие
kernel.terminate(если используется FastCGI) для тяжелых операций после отправки ответа (логирование, отправка писем). Затем ядро завершает работу.
Важно: Symfony использует EventDispatcher для гибкости - почти каждый этап можно переопределить через слушатели или подписчики. Например, kernel.exception обрабатывает ошибки и преобразует их в дружественные ответы.
> Похожие задачи по PHP
Какие принципы проектирования кроме SOLID существуют
Как оптимизировать алгоритм поиска уникального элемента без дополнительной памяти
Что произойдет при вызове асинхронной функции без await?
Какой порядок параметров у функции array_filter в PHP
> Похожие задачи по backend
Какие принципы проектирования кроме SOLID существуют
Как оптимизировать алгоритм поиска уникального элемента без дополнительной памяти
Что произойдет при вызове асинхронной функции без await?
Какой порядок параметров у функции array_filter в PHP
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью