Неизменяемый диспетчер событий

Дата обновления перевода 2023-08-21

Неизменяемый диспетчер событий

ImmutableEventDispatcher - это закрытый или замороженный диспетчер событий. Диспетчер не может регистрировать новых слушателей или подписчиков.

ImmutableEventDispatcher берёт другой диспетчер событий со всеми слушателями и подписчиками. Неизменяемый диспетчер - это просто прокси оригинального диспетчера.

Для того, чтобы использовать его, для начала создайте нормальный диспетчер EventDispatcher и зарегистрируйте некоторых слушателей или подписчиков:

1
2
3
4
5
6
7
8
9
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Contracts\EventDispatcher\Event;

$dispatcher = new EventDispatcher();
$dispatcher->addListener('foo.action', function (Event $event): void {
    // ...
});

// ...

Теперь, внедрите это в ImmutableEventDispatcher:

1
2
3
4
use Symfony\Component\EventDispatcher\ImmutableEventDispatcher;
// ...

$immutableDispatcher = new ImmutableEventDispatcher($dispatcher);

Вам нужно будет использовать этот новый диспетчер в вашем проекте.

Если вы попробуете выполнить один из методов, изменяющий диспетчер (например, addListener()), то будет вызвано BadMethodCallException.