dhii / event-interface
一个用于补充 PSR-14 的事件标准
v0.4.0-alpha1
2021-06-01 18:20 UTC
Requires
- php: ^7.2 | ^8.0
- psr/event-dispatcher: ^1.0
Requires (Dev)
- dhii/event-dispatcher-interface: ^0.2
- phpunit/phpunit: ^8.0 | ^9.0
- slevomat/coding-standard: ^6.0
- vimeo/psalm: ^4.0
Suggests
- dhii/event-dispatcher-interface: For working with name-based events
This package is auto-updated.
Last update: 2024-08-29 04:31:38 UTC
README
详细信息
PSR-14 标准提供了用于事件分发的接口。但是,对于事件本身呢?如果消费者(即发射器)没有对事件外观达成一致,它们如何与处理器进行交互?此包旨在提供接口,以促进按事件名称识别的事件的互操作性。
用法
基本功能
本质上,事件只是一个与名称相关联的参数映射。
<?php use Dhii\Events\Event\StoppableEventFactoryInterface; /* @var $factory StoppableEventFactoryInterface */ $event = $factory->make('my_event', ['key' => 'value']); echo $event->getName(); // 'my_event' echo $event->getParam('key'); // 'value' $params = $event->getParams(); var_dump($params); // ['key' => 'value'] $params['hello'] = 'world'; $event->setParams($params); echo $event->getParam('hello'); // 'world' ?>
使用 PSR-14
可以使用符合标准的事件分发器分发事件。此示例需要建议的 dhii/event-dispatcher-interface
包。
<?php use Psr\EventDispatcher\EventDispatcherInterface; use Dhii\Events\Event\EventInterface; use Dhii\Events\Event\StoppableEventFactoryInterface; use Dhii\Events\Listener\AddListenerCapableInterface; /* @var $dispatcher EventDispatcherInterface */ /* @var $factory StoppableEventFactoryInterface */ /* @var $listenerMap AddListenerCapableInterface */ // First listener will change a value and stop propagation $listenerMap->addListener('my_event', function (EventInterface $event) { $params = $event->getParams(); $params['key'] = 'other_value'; $event->setParams($params); $event->stopPropagation(); }, 1); // Second listener is never run, therefore the value does not change again $listenerMap->addListener('my_event', function (EventInterface $event) { $params = $event->getParams(); $params['key'] = 'yet another value'; $event->setParams($params); }, 2); $event = $factory->make('my_event', ['key' => 'value']); $dispatcher->dispatch($event); echo $event->getParam('key'); // 'other_value' ?>