Класс RequestEvent
Класс RequestEvent представляет событие,
которое создаётся ядром Symfony при обработке
HTTP-запроса. Он наследуется от KernelEvent
и содержит объект Request, доступный через
метод getRequest. Слушатели этого события
могут читать данные запроса, а также изменять
его до того, как он будет передан контроллеру.
Событие RequestEvent срабатывает на этапе
kernel.request.
Синтаксис
use Symfony\Component\HttpKernel\Event\RequestEvent;
$event = new RequestEvent($kernel, $request, $requestType);
Первым параметром передаётся объект ядра
HttpKernelInterface, вторым - объект
Request, третьим - тип запроса
(например, HttpKernelInterface::MAIN_REQUEST).
Пример
Давайте создадим слушателя события kernel.request,
который получает объект запроса через метод
getRequest и выводит его метод:
<?php
namespace App\EventListener;
use Symfony\Component\HttpKernel\Event\RequestEvent;
class RequestListener
{
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
echo $request->getMethod();
}
}
?>
Результат выполнения кода для GET-запроса:
"GET"
Пример
Давайте проверим, является ли событие основным
запросом, с помощью метода isMainRequest:
<?php
namespace App\EventListener;
use Symfony\Component\HttpKernel\Event\RequestEvent;
class RequestListener
{
public function onKernelRequest(RequestEvent $event): void
{
if ($event->isMainRequest()) {
echo 'main request';
} else {
echo 'sub request';
}
}
}
?>
Результат выполнения кода для основного запроса:
"main request"
Пример
Давайте зарегистрируем слушателя в конфигурации
сервисов и повесим его на событие kernel.request:
services:
App\EventListener\RequestListener:
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
Теперь при каждом HTTP-запросе Symfony будет
вызывать метод onKernelRequest и передавать
в него объект RequestEvent.
Смотрите также
-
метод
getRequest,
который возвращает объект запроса -
метод
isMainRequest,
который проверяет основной ли это запрос -
событие
RequestEvent,
которое срабатывает при обработке запроса -
класс
KernelEvents,
который содержит имена всех событий ядра