weew / eventer
简单的事件系统。
v2.2.2
2016-07-21 11:17 UTC
Requires
- weew/helpers-array: ^1.0.0
- weew/helpers-string: ^1.0.0
Requires (Dev)
- phpunit/phpunit: ^4.7
- satooshi/php-coveralls: ^0.6.1
README
目录
安装
composer install weew/eventer
使用
此事件系统允许您轻松订阅特定事件,并在事件发生时立即收到通知。订阅事件的简单方法是用字符串作为事件名称。
简单订阅
创建订阅的最简单方法是使用回调函数。
$eventer = new Eventer(); $eventer->subscribe('event.name', function(IEvent $event) { echo $event->getName(); // event.name }); $eventer->dispatch('event.name');
将数据附加到事件
通常,您可能想要附加特定数据来抛出事件。实现此目的的最快方法是使用通用事件。
$eventer = new Eventer(); $eventer->subscribe('event.name', function(IEvent $event) { var_dump($event->getData()); // ['secret' => 'secret value'] echo $event->get('secret'); // secret value }); $event = new GenericEvent('event.name', ['secret' => 'secret value']); // or $event = new GenericEvent('event.name'); $event->set('secret', 'secret value'); $eventer->dispatch($event);
创建自定义事件
在更复杂的应用程序中,我建议您自己创建事件。这使代码更容易理解,因为您永远不必猜测事件名称可能是什么。它还允许您通过更复杂的行为扩展事件。
class CustomEvent extends Event { public function getSecret() { return 'secret value'; } } $eventer = new Eventer(); $eventer->subscribe(CustomEvent::class, function(CustomEvent $event) { echo $event->getSecret(); // secret value }); $eventer->dispatch(new CustomEvent());
取消事件订阅
要取消事件订阅,您可以简单地将订阅对象传递给事件分发器的取消订阅方法。
$eventer = new Eventer(); $subscription = $eventer->subscribe('event.name', 'abstract.value'); $eventer->unsubscribe($subscription);
事件订阅者
在事件中使用回调可能并不总是最佳解决方案。因此,您可以创建在事件发生时被调用的事件订阅者类。该类必须具有 handle(IEvent $event)
方法,但没有强制您实现的特定接口。
class CustomEvent extends Event { public function getSecret() { return 'secret value'; } } class CustomEventSubscriber { public function handle(IEvent $event) { /** @var CustomEvent $event */ echo $event->getSecret(); // secret value } } $eventer = new Eventer(); $eventer->subscribe(CustomEvent::class, CustomEventSubscriber::class); $eventer->dispatch(new CustomEvent());
现有容器集成
存在针对 weew/container 的集成。请参阅 eventer-container-aware。