Событие RequestEvent
Событие RequestEvent относится к компоненту HttpKernel и вызывается в момент, когда ядро получает объект Request. Это событие позволяет слушателям получить доступ к запросу до того, как он будет передан контроллеру, и при необходимости установить объект Response, чтобы прервать дальнейшую обработку. Первым параметром в слушатель передаётся объект события, содержащий текущий запрос.
Синтаксис
use Symfony\Component\HttpKernel\Event\RequestEvent;
Пример
Давайте создадим слушателя, который проверяет наличие заголовка X-Custom-Auth и возвращает ответ, если он отсутствует:
<?php
namespace App\EventListener;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpFoundation\Response;
class RequestListener
{
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
if (!$request->headers->has('X-Custom-Auth')) {
$event->setResponse(new Response('Access denied', 403));
}
}
}
?>
Теперь зарегистрируем слушателя в конфигурации сервисов:
services:
App\EventListener\RequestListener:
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
Результат выполнения кода при отсутствии заголовка:
"Access denied"
Пример
Давайте получим объект запроса и выведем метод HTTP в лог:
<?php
namespace App\EventListener;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
class RequestLogger
{
private LoggerInterface $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
$this->logger->info('Request method: ' . $request->getMethod());
}
}
?>
Результат выполнения кода в логе:
"Request method: GET"
Смотрите также
-
класс
RequestEvent,
который представляет событие ядра -
метод
getRequest,
который возвращает объект запроса -
метод
setResponse,
который устанавливает ответ и прерывает обработку -
событие
ResponseEvent,
которое возникает при формировании ответа