onoi / event-dispatcher
将通用事件传递给注册监听器的一种简约接口
1.1.0
2019-01-27 03:37 UTC
Requires
- php: >=5.3.2
This package is auto-updated.
Last update: 2024-08-29 04:08:48 UTC
README
这是一个简约的事件分发器(观察者)接口,曾是Semantic MediaWiki代码库的一部分,现在作为一个独立的库被部署。
需求
PHP 5.3/HHVM 3.3 或更高版本
安装
此库的推荐安装方法是通过将依赖添加到您的 composer.json 文件中。
{ "require": { "onoi/event-dispatcher": "~1.0" } }
使用方法
class BarListener implements EventListener { public function execute( DispatchContext $dispatchContext = null ) { // Do something } public function isPropagationStopped() { return false; } }
class ListenerCollectionRegistry implements EventListenerCollection { private $eventListenerCollection; public function __construct( EventListenerCollection $eventListenerCollection ) { $this->eventListenerCollection = $eventListenerCollection; } public function getCollection() { return $this->addToListenerCollection()->getCollection(); } private function addToListenerCollection() { $this->eventListenerCollection->registerCallback( 'do.something', function() { // Do something } ); $this->eventListenerCollection->registerListener( 'notify.bar', new BarListener() ); return $this->eventListenerCollection; } }
$eventDispatcherFactory = new EventDispatcherFactory(); $listenerCollectionRegistry = new ListenerCollectionRegistry( $eventDispatcherFactory->newGenericEventListenerCollection() ); $eventDispatcher = $eventDispatcherFactory->newGenericEventDispatcher(); $eventDispatcher->addListenerCollection( $listenerCollectionRegistry ); class Foo { use EventDispatcherAwareTrait; public function doSomething() { // No context $this->eventDispatcher->dispatch( 'do.something' ); $dispatchContext = new DispatchContext(); $dispatchContext->set( 'dosomethingelse', new \stdClass ); // Using `DispatchContext` $this->eventDispatcher->dispatch( 'notify.bar', $dispatchContext ); // Using an array as context which is later converted into // a `DispatchContext` $this->eventDispatcher->dispatch( 'notify.foo', [ 'Bar' => 123 ] ); } } $instance = new Foo(); $instance->setEventDispatcher( $eventDispatcher ); $instance->doSomething();
贡献和支持
如果您想为该项目做出贡献,请订阅开发者邮件列表,并查看贡献指南。过去做出贡献的人名单可以在这里找到。
测试
该库提供了单元测试,覆盖了通常由持续集成平台运行的核心理念。也可以使用根目录中找到的PHPUnit配置文件手动执行测试。
发行说明
- 1.1.0 (2019-01-27)
- 允许
EventDispatcher::dispatch
接受数组作为上下文对象 - 添加了
EventNotDispatchableException
和Subscriber
接口 - 添加了
EventDispatcherAwareTrait
类
- 允许
- 1.0.0 首次发布(2015-03-25)