Ответ вслух Senior Symfony кратко обновлено

Путь запроса в Symfony

Вопрос

Расскажите, как Symfony обрабатывает HTTP-запрос.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Всё начинается с public/index.php: он создаёт Kernel и объект Request из суперглобальных переменных. Ядро загружает скомпилированный контейнер из кеша и передаёт запрос в HttpKernel.

Что должно прозвучать в ответе

  • Front controller public/index.php создаёт Kernel и Request из глобальных переменных

  • HttpKernel: kernel.request (роутинг, безопасность), выбор контроллера

  • ArgumentResolver: сущности, DTO из запроса, сервисы

  • Контроллер возвращает Response или данные для kernel.view

  • kernel.response и kernel.terminate, kernel.exception при ошибке

  • Скомпилированный контейнер и кеш маршрутов

Что могут спросить следом

  • Где бы вы добавили заголовок ко всем ответам?
  • Что выполняется на kernel.terminate?

Разбор

Всё начинается с public/index.php: он создаёт Kernel и объект Request из суперглобальных переменных. Ядро загружает скомпилированный контейнер из кеша и передаёт запрос в HttpKernel.

HttpKernel построен на событиях. На kernel.request слушатель маршрутизации определяет маршрут и контроллер, а компонент безопасности аутентифицирует пользователя и проверяет доступ. Любой слушатель может сразу вернуть ответ. Затем kernel.controller, и резолверы аргументов готовят параметры: сущность по id, DTO из тела запроса через MapRequestPayload, сервисы.

Контроллер возвращает Response, или данные, которые слушатель kernel.view превращает в ответ. На kernel.response можно изменить ответ, например добавить заголовки. После отправки клиенту срабатывает kernel.terminate, где удобно делать отложенную работу. Если где-то вылетело исключение, kernel.exception превращает его в страницу ошибки или JSON.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.