РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1012 of 1361 menu

Событие KernelEvents

Класс KernelEvents содержит строковые константы с именами событий, которые ядро Symfony (класс HttpKernel) вызывает во время обработки HTTP-запроса. Каждая константа - это имя события, на которое можно повесить слушателя через EventDispatcherInterface. Порядок событий соответствует этапам обработки запроса.

Класс предоставляет следующие константы: KernelEvents::REQUEST - возникает в начале обработки запроса; KernelEvents::CONTROLLER - возникает после определения контроллера, но до его вызова; KernelEvents::CONTROLLER_ARGUMENTS - возникает после разрешения аргументов контроллера; KernelEvents::VIEW - возникает, когда контроллер возвращает не объект Response; KernelEvents::RESPONSE - возникает перед отправкой ответа клиенту; KernelEvents::FINISH_REQUEST - возникает после отправки ответа; KernelEvents::TERMINATE - возникает после завершения отправки ответа; KernelEvents::EXCEPTION - возникает при выбросе исключения во время обработки запроса.

Синтаксис

use SymfonyComponentHttpKernelKernelEvents; KernelEvents::REQUEST; KernelEvents::CONTROLLER; KernelEvents::CONTROLLER_ARGUMENTS; KernelEvents::VIEW; KernelEvents::RESPONSE; KernelEvents::FINISH_REQUEST; KernelEvents::TERMINATE; KernelEvents::EXCEPTION;

Пример

Давайте подпишемся на событие KernelEvents::REQUEST и выведем сообщение в лог при каждом запросе:

<?php namespace AppEventListener; use SymfonyComponentHttpKernelKernelEvents; use SymfonyComponentHttpKernelEventRequestEvent; use SymfonyComponentEventDispatcherEventSubscriberInterface; class RequestListener implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => 'onKernelRequest', ]; } public function onKernelRequest(RequestEvent $event): void { echo 'request received'; } } ?>

Результат выполнения кода при обращении к любому маршруту:

"request received"

Пример

Давайте подпишемся сразу на несколько событий ядра, чтобы отследить этапы обработки запроса:

<?php namespace AppEventListener; use SymfonyComponentHttpKernelKernelEvents; use SymfonyComponentHttpKernelEventRequestEvent; use SymfonyComponentHttpKernelEventResponseEvent; use SymfonyComponentHttpKernelEventTerminateEvent; use SymfonyComponentEventDispatcherEventSubscriberInterface; class KernelListener implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => 'onRequest', KernelEvents::RESPONSE => 'onResponse', KernelEvents::TERMINATE => 'onTerminate', ]; } public function onRequest(RequestEvent $event): void { echo 'stage: request'; } public function onResponse(ResponseEvent $event): void { echo 'stage: response'; } public function onTerminate(TerminateEvent $event): void { echo 'stage: terminate'; } } ?>

Результат выполнения кода:

"stage: request" "stage: response" "stage: terminate"

Пример

Давайте перехватим событие KernelEvents::EXCEPTION и подменим ответ при возникновении исключения:

<?php namespace AppEventListener; use SymfonyComponentHttpKernelKernelEvents; use SymfonyComponentHttpKernelEventExceptionEvent; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentEventDispatcherEventSubscriberInterface; class ExceptionListener implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ KernelEvents::EXCEPTION => 'onKernelException', ]; } public function onKernelException(ExceptionEvent $event): void { $res = new Response('error handled'); $event->setResponse($res); } } ?>

Результат выполнения кода при выбросе исключения в контроллере:

"error handled"

Смотрите также

  • класс RequestEvent,
    который передаётся в событие KernelEvents::REQUEST
  • класс ResponseEvent,
    который передаётся в событие KernelEvents::RESPONSE
  • класс ExceptionEvent,
    который передаётся в событие KernelEvents::EXCEPTION
  • класс TerminateEvent,
    который передаётся в событие KernelEvents::TERMINATE
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить