Событие TerminateEvent
Событие TerminateEvent относится к секции kernel и срабатывает
после того, как ответ был отправлен клиенту. Оно позволяет выполнить
тяжёлые операции (логирование, отправку писем, очистку кеша) вне
основного цикла обработки запроса, чтобы не задерживать ответ.
Первым параметром событие принимает объект Request,
вторым - объект Response. Получить их можно через методы
getRequest и getResponse.
Синтаксис
use SymfonyComponentHttpKernelEventTerminateEvent;
$event->getRequest(): Request
$event->getResponse(): Response
Пример
Давайте подпишемся на событие TerminateEvent и запишем в лог адрес запроса:
<?php
namespace AppEventListener;
use SymfonyComponentEventDispatcherEventSubscriberInterface;
use SymfonyComponentHttpKernelEventTerminateEvent;
use SymfonyComponentHttpKernelKernelEvents;
class TerminateListener implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
KernelEvents::TERMINATE => 'onTerminate',
];
}
public function onTerminate(TerminateEvent $event): void
{
$request = $event->getRequest();
echo $request->getPathInfo();
}
}
?>
Результат выполнения кода для адреса /user/abcde:
/user/abcde
Пример
Давайте получим объект ответа и выведем его статус-код:
<?php
namespace AppEventListener;
use SymfonyComponentEventDispatcherEventSubscriberInterface;
use SymfonyComponentHttpKernelEventTerminateEvent;
use SymfonyComponentHttpKernelKernelEvents;
class TerminateListener implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
KernelEvents::TERMINATE => 'onTerminate',
];
}
public function onTerminate(TerminateEvent $event): void
{
$response = $event->getResponse();
echo $response->getStatusCode();
}
}
?>
Результат выполнения кода:
200
Смотрите также
-
событие
ResponseEvent,
которое срабатывает при формировании ответа -
событие
RequestEvent,
которое срабатывает при получении запроса -
событие
FinishRequestEvent,
которое срабатывает при завершении обработки запроса -
класс
KernelEvents,
который содержит константы имён событий ядра