> Как устроен жизненный цикл запроса в Symfony (PHP)

Уровень: senior · Роль: backend · Язык: PHP · Категория: Технические вопросы

Компании: Travelata

Стек: PHP

> Пример ответа

Жизненный цикл запроса в Symfony проходит через несколько ключевых этапов, начиная с входящего HTTP-запроса и заканчивая ответом клиенту. Вот его краткая схема:

  1. Входной файл (Front Controller) - обычно public/index.php. Symfony загружает автозагрузчик Composer и создает экземпляр Kernel (например, AppKernel или Kernel из Symfony Flex).

  2. Создание Request - из глобальных переменных PHP ($_GET, $_POST, $_SERVER, $_COOKIE) формируется объект Symfony\Component\HttpFoundation\Request. Это происходит в методе Kernel::handle().

  3. Обработка через 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 - очистка после обработки.
  4. Отправка ответа - метод $response->send() выводит заголовки и тело ответа в PHP-поток.

  5. Завершение (Shutdown) - событие kernel.terminate (если используется FastCGI) для тяжелых операций после отправки ответа (логирование, отправка писем). Затем ядро завершает работу.

Важно: Symfony использует EventDispatcher для гибкости - почти каждый этап можно переопределить через слушатели или подписчики. Например, kernel.exception обрабатывает ошибки и преобразует их в дружественные ответы.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью