onoi / event-dispatcher
A minimalistic interface to relay generic events to registered listeners
Installs: 418 491
Dependents: 3
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- php: >=5.3.2
This package is auto-updated.
Last update: 2024-10-29 04:31:00 UTC
README
A minimalistic event dispatcher (observer) interface that was part of the Semantic MediaWiki code base and is now being deployed as independent library.
Requirements
PHP 5.3/HHVM 3.3 or later
Installation
The recommended installation method for this library is by either adding the dependency to your composer.json.
{ "require": { "onoi/event-dispatcher": "~1.0" } }
Usage
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();
Contribution and support
If you want to contribute work to the project please subscribe to the developers mailing list and have a look at the contribution guidelinee. A list of people who have made contributions in the past can be found here.
Tests
The library provides unit tests that covers the core-functionality normally run by the continues integration platform. Tests can also be executed manually using the PHPUnit configuration file found in the root directory.
Release notes
- 1.1.0 (2019-01-27)
- Allowed
EventDispatcher::dispatch
to take an array as context object - Added the
EventNotDispatchableException
andSubscriber
interface - Added the
EventDispatcherAwareTrait
class
- Allowed
- 1.0.0 initial release (2015-03-25)