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

Событие FinishRequestEvent

Событие FinishRequestEvent относится к секции kernel и срабатывает в тот момент, когда ядро Symfony завершило обработку запроса, но ещё не отправило ответ клиенту. Событие даёт возможность выполнить финальные действия: очистить временные данные, закрыть соединения, записать итоговую статистику. В отличие от TerminateEvent, которое срабатывает после отправки ответа, FinishRequestEvent вызывается раньше, до того как ответ ушёл клиенту. Объект события хранит текущий запрос и ответ, которые доступны через методы getRequest и getResponse.

Синтаксис

use Symfony\Component\HttpKernel\Event\FinishRequestEvent; $event = new FinishRequestEvent($kernel, $request, $requestType); $event->getRequest(); $event->getResponse(); $event->isMainRequest();

Пример

Давайте подпишемся на событие FinishRequestEvent и выведем сообщение о завершении обработки запроса:

<?php namespace App\EventListener; use Symfony\Component\HttpKernel\Event\FinishRequestEvent; class FinishRequestListener { public function onFinishRequest(FinishRequestEvent $event): void { $request = $event->getRequest(); echo 'Request finished: ' . $request->getPathInfo(); } } ?>

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

"Request finished: /user"

Пример

Давайте зарегистрируем слушателя через атрибут AsEventListener и укажем событие kernel.finish_request:

<?php namespace App\EventListener; use Symfony\Component\EventDispatcher\Attribute\AsEventListener; use Symfony\Component\HttpKernel\Event\FinishRequestEvent; use Symfony\Component\HttpKernel\KernelEvents; #[AsEventListener(event: KernelEvents::FINISH_REQUEST)] class FinishRequestListener { public function __invoke(FinishRequestEvent $event): void { $request = $event->getRequest(); $response = $event->getResponse(); echo 'Path: ' . $request->getPathInfo() . PHP_EOL; echo 'Status: ' . $response->getStatusCode(); } } ?>

Результат выполнения кода для адреса /user со статусом 200:

"Path: /user Status: 200"

Пример

Давайте проверим, является ли запрос главным, через метод isMainRequest:

<?php namespace App\EventListener; use Symfony\Component\EventDispatcher\Attribute\AsEventListener; use Symfony\Component\HttpKernel\Event\FinishRequestEvent; use Symfony\Component\HttpKernel\KernelEvents; #[AsEventListener(event: KernelEvents::FINISH_REQUEST)] class FinishRequestListener { public function __invoke(FinishRequestEvent $event): void { if ($event->isMainRequest()) { echo 'Main request finished'; } else { echo 'Sub request finished'; } } } ?>

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

"Main request finished"

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

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