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

Событие ControllerEvent

Событие ControllerEvent возникает в ядре Symfony сразу после того, как маршрутизатор определил, какой контроллер должен быть вызван. Оно даёт возможность перехватить этот вызов до выполнения метода контроллера. Первым параметром в конструктор передаётся объект HttpKernelInterface, вторым - вызываемый контроллер в виде callable, третьим - объект Request.

Главная особенность события в том, что оно позволяет не только заменить контроллер на другой, но и изменить аргументы, которые будут переданы в метод. Для этого используются методы setController, getController, setArguments и getArguments. Обработчик должен быть зарегистрирован на константу KernelEvents::CONTROLLER.

Синтаксис

use Symfony\Component\HttpKernel\Event\ControllerEvent; public function onController(ControllerEvent $event): void { // logic }

Пример

Давайте зарегистрируем слушателя события ControllerEvent и выведем имя вызванного контроллера:

<?php namespace AppEventListener; use SymfonyComponentHttpKernelEventControllerEvent; class ControllerListener { public function onController(ControllerEvent $event): void { $controller = $event->getController(); if (is_array($controller)) { echo $controller[1]; } else { echo $controller; } } } ?>

Теперь свяжем слушателя с событием через конфигурацию сервиса:

services: AppEventListenerControllerListener: tags: - { name: kernel.event_listener, event: kernel.controller, method: onController }

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

"index"

Пример

Давайте изменим аргументы контроллера перед его вызовом. Подменим значение параметра name на строку 'abcde':

<?php namespace AppEventListener; use SymfonyComponentHttpKernelEventControllerEvent; class ControllerListener { public function onController(ControllerEvent $event): void { $args = $event->getArguments(); foreach ($args as $key => $value) { if ($key === 'name') { $args[$key] = 'abcde'; } } $event->setArguments($args); } } ?>

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

abcde

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

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