Класс 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,
который описывает подписчика событий