Psr14EventDispatcher¶
Роутер под стандартным интерфейсом PSR-14 — для кода и библиотек,
которые знают только Psr\EventDispatcher\EventDispatcherInterface.
Как из объекта получается событие:
- объект реализует EventInterface — рассылается как есть;
- иначе имя события даёт маппер из конструктора, а сам объект становится payload.
Объект без EventInterface и без маппера — исключение UnmappableEvent: имя события не угадывается по имени класса.
$dispatcher = new Psr14EventDispatcher(
$events,
static fn (object $event): string => match (true) {
$event instanceof OrderPaid => 'shop.order.' . $event->orderId . '.paid',
},
);
$dispatcher->dispatch(new OrderPaid(42, 1500)); // слушатели получат OrderPaid в getPayload()
Как требует PSR-14, dispatch() возвращает тот же объект, что получил.
Остановка рассылки через StoppableEventInterface работает: роутер проверяет и событие, и payload.
- Full name:
\Selyusize\EventsRouter\Psr14\Psr14EventDispatcher - This class is marked as final and can't be subclassed
- This class implements:
EventDispatcherInterface - This class is a Final class
Methods¶
__construct¶
Parameters:
| Parameter | Type | Description |
|---|---|---|
$router |
\Selyusize\EventsRouter\EventRouter | |
$topic |
callable|null | имя события для объекта без EventInterface |
dispatch¶
Parameters:
| Parameter | Type | Description |
|---|---|---|
$event |
\Selyusize\EventsRouter\Psr14\T |
Throws:
если имя события неизвестно
- UnmappableEvent
если маппер вернул некорректное имя
- InvalidEventName