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

Класс EventDispatcher

Класс EventDispatcher является центральным компонентом системы событий Symfony. Он хранит список слушателей для каждого события и при вызове метода dispatch передаёт объект события всем зарегистрированным слушателям по очереди с учётом приоритета. Первым параметром метод dispatch принимает объект события, вторым - необязательное имя события. Класс реализует интерфейс EventDispatcherInterface.

Синтаксис

use Symfony\Component\EventDispatcher\EventDispatcher; $dispatcher = new EventDispatcher();

Пример

Давайте создадим диспетчер и вызовем событие 'user.created':

<?php namespace App\Service; use Symfony\Component\EventDispatcher\EventDispatcher; class UserService { public function create(): void { $dispatcher = new EventDispatcher(); $dispatcher->dispatch(new \stdClass(), 'user.created'); echo 'user'; } } ?>

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

"user"

Пример

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

<?php namespace App\Service; use Symfony\Component\EventDispatcher\EventDispatcher; class UserService { public function create(): void { $dispatcher = new EventDispatcher(); $dispatcher->addListener('user.created', function ($event) { echo 'listener called'; }); $dispatcher->dispatch(new \stdClass(), 'user.created'); } } ?>

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

"listener called"

Пример

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

<?php namespace App\Service; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Contracts\EventDispatcher\Event; class UserEvent extends Event { public function __construct(public string $name) { } } class UserService { public function create(): void { $dispatcher = new EventDispatcher(); $dispatcher->addListener('user.created', function (UserEvent $event) { echo $event->name; }); $dispatcher->dispatch(new UserEvent('abcde'), 'user.created'); } } ?>

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

"abcde"

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

  • метод dispatch,
    который вызывает событие
  • метод addListener,
    который регистрирует слушателя события
  • метод addSubscriber,
    который регистрирует подписчика событий
  • класс EventSubscriber,
    который описывает подписчика событий
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить