7.4.1 Начальная подготовка или возврат Response
Обычно HttpKernel будет пытаться сгенерировать ответ вызывая контроллер. Но какой-либо listener, который слушает событие KernelEvents::REQUEST(kernel.request) может самостоятельно сгенерировать полностью настраиваемый ответ с помощью метода setResponse().
...
// \Symfony\Component\HttpKernel\HttpKernel.php
private function handleRaw(Request $request, $type = self::MASTER_REQUEST)
{
$event = new GetResponseEvent($this, $request, $type);
$this->dispatcher->dispatch(KernelEvents::REQUEST, $event);
if ($event->hasResponse()) {
return $this->filterResponse($event->getResponse(), $request, $type);
}
...
}
Существует стандартные слушатели данного события:
- RouteListener - берёт путь из объекта Response и пытается соонтести его с каким-либо маршрутом. И сохраняет результат в атрибутах объекта (_controller).
- Firewall - проверяет права на посещение защищных страниц и если пользователь не авторизован - то может самостоятельно сгенерировать Response с 403 ошибкой.
Таким образом, цель события kernel.request - это либо создание и возврат ответа Response напрямую, либо добавление какой-либо информации в атрибуты объекта Request.