slince/event-dispatcher

事件分发器包

2.0.0 2018-06-21 10:22 UTC

This package is auto-updated.

Last update: 2024-09-08 19:16:34 UTC


README

Build Status Coverage Status Latest Stable Version Scrutinizer

安装

通过composer安装。

$ composer require slince/event-dispatcher

使用方法

创建事件分发器

$dispatcher = new Slince\EventDispatcher\Dispatcher();

为指定事件添加监听器

监听器有两种类型:callableSlince\EventDispatcher\Listener

  • Slince\EventDispatcher\Listener
use Slince\EventDispatcher\ListenerInterface;

class FooListener implements ListenerInterface
{
     public function handle(Event $event)
     {
         //do something
     }
}

$dispatcher->addListener('foo-event-name', new FooListener());
  • callable
$dispatcher->addListener('foo-event-name', function(Event $event){
    //do something
});

添加订阅者

use Slince\EventDispatcher\SubscriberInterface;

class FooSubscriber implements SubscriberInterface
{
     public static function getSubscribedEvents(Event $event)
     {
        return [
            'foo' => 'onFoo',
            'bar' => 'onBar'
        ];
     }
     
    public function onFoo(Event $event)
    {
      //do something
    }
    
    public function onBar(Event $event)
    {
       //do something
    }
}

$dispatcher->addSubscriber(new FooSubscriber());

将事件分发给已注册的监听器

仅提供事件名称。

$dispatcher->dispatch('foo-event-name');

您也可以使用事件实例进行分发。

$dispatcher->dispatch(new Event('foo-event-name'));

传播

您可以在事件实例上调用 stopPropagation 来停止事件传播。

$dispatcher->addListener('foo-event-name', function(Event $event){
    $event->stopPropagation();
});

$emitter->addListener('foo-event-name', function ($event) {
    // This will not be triggered
});

$dispatcher->dispatch('foo-event-name');

检查是否停止了传播

$event = new Event('foo-event-name');
$dispatcher->dispatch($event);

$event->isPropagationStopped();

许可证

MIT许可证。请参阅 MIT