Install via composer.
$ composer require slince/event-dispatcher
$dispatcher = new Slince\EventDispatcher\Dispatcher();
There are two types of listeners: callable
and Slince\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());
Just provides the event name.
$dispatcher->dispatch('foo-event-name');
You can also dispatch with an event instance.
$dispatcher->dispatch(new Event('foo-event-name'));
You can call stopPropagation
to stop event propagation on the event instance.
$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');
Checks whether propagation is stopped
$event = new Event('foo-event-name');
$dispatcher->dispatch($event);
$event->isPropagationStopped();
The MIT license. See MIT