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

Событие ViewEvent

Событие ViewEvent вызывается ядром HttpKernel после того, как контроллер вернул результат. Оно позволяет перехватить результат работы контроллера до того, как он будет преобразован в объект Response. Событие даёт доступ к контроллеру и его аргументам через методы getController и getArguments, а также к самому результату через метод getResponse.

Обработчик события регистрируется как сервис с тегом kernel.event_listener или kernel.event_subscriber. Событие вызывается только один раз за основной запрос и не срабатывает для подзапросов.

Синтаксис

use Symfony\Component\HttpKernel\Event\ViewEvent; class ViewListener { public function onView(ViewEvent $event): void { $controller = $event->getController(); $arguments = $event->getArguments(); $res = $event->getResponse(); } }

Пример

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

<?php namespace App\EventListener; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\ViewEvent; class ViewListener { public function onView(ViewEvent $event): void { if ($event->getResponse() === null) { $event->setResponse(new Response('hello')); } } } ?>

Зарегистрируем слушателя в конфигурации сервисов:

services: App\EventListener\ViewListener: tags: - { name: kernel.event_listener, event: kernel.view }

Теперь для любого контроллера, вернувшего значение, не являющееся Response, будет отдан ответ 'hello'.

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

hello

Пример

Давайте получим контроллер и аргументы внутри слушателя:

<?php namespace App\EventListener; use Symfony\Component\HttpKernel\Event\ViewEvent; class ViewListener { public function onView(ViewEvent $event): void { $controller = $event->getController(); $arguments = $event->getArguments(); $name = get_class($controller[0]); $method = $controller[1]; echo $name . '::' . $method; } } ?>

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

"App\Controller\ArticleController::index"

Пример

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

<?php namespace App\EventListener; use Symfony\Component\HttpKernel\Event\ViewEvent; class ViewListener { public function onView(ViewEvent $event): void { if ($event->isMainRequest()) { echo 'main request'; } else { echo 'sub request'; } } } ?>

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

"main request"

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

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