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

Класс GenericEvent

Класс GenericEvent - это универсальная реализация события, которая позволяет передавать через диспетчер событий произвольные данные. Первым параметром в конструктор передаётся субъект (subject), а вторым - массив аргументов (arguments). Субъект обычно представляет собой объект, над которым выполняется действие, а аргументы хранят дополнительные данные. Класс реализует интерфейс Event и наследует Event, поэтому его можно передавать в метод dispatch.

Синтаксис

new GenericEvent(mixed $subject = null, array $arguments = [])

Пример

Давайте создадим событие GenericEvent с субъектом и аргументами и передадим его в диспетчер:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\GenericEvent; class ArticleController extends AbstractController { public function index(): Response { $dispatcher = new EventDispatcher(); $dispatcher->addListener('article.action', function (GenericEvent $event) { echo $event->getSubject(); }); $subject = 'article'; $arguments = ['id' => 1]; $event = new GenericEvent($subject, $arguments); $dispatcher->dispatch($event, 'article.action'); return new Response('ok'); } } ?>

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

"article"

Пример

Давайте получим аргумент события по имени через метод getArgument:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\GenericEvent; class ArticleController extends AbstractController { public function index(): Response { $dispatcher = new EventDispatcher(); $dispatcher->addListener('article.action', function (GenericEvent $event) { echo $event->getArgument('id'); }); $event = new GenericEvent('article', ['id' => 5]); $dispatcher->dispatch($event, 'article.action'); return new Response('ok'); } } ?>

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

"5"

Пример

Давайте установим новый аргумент события через метод setArgument:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\GenericEvent; class ArticleController extends AbstractController { public function index(): Response { $dispatcher = new EventDispatcher(); $dispatcher->addListener('article.action', function (GenericEvent $event) { $event->setArgument('name', 'abcde'); echo $event->getArgument('name'); }); $event = new GenericEvent('article'); $dispatcher->dispatch($event, 'article.action'); return new Response('ok'); } } ?>

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

"abcde"

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

  • класс EventDispatcher,
    который управляет событиями и их слушателями
  • метод dispatch,
    который запускает событие и вызывает слушателей
  • метод getSubject,
    который возвращает субъект события
  • метод getArguments,
    который возвращает все аргументы события
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить