slince/event

此包已被废弃,不再维护。作者建议使用 slince/event-dispatcher 包。

事件分发器包

2.0.0 2018-06-21 10:22 UTC

This package is auto-updated.

Last update: 2022-02-01 12:39:37 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