Usage
Simple global/local dispatcher library.
Classes (Global/Local)
- Class
EventDispatcherfor global use - Class
Dispatcherfor local use (object)
<?php
EventDispatcher::register('event', function() {});
$dispatcher = new Dispatcher;
$dispatcher->register('event', function() {});
Methods
With registered the only method returning a boolean, all other methods can be chained.
<?php
(new Dispatcher)
->register('event', function() {})
->once('once-only', function() {})
->dispatch('another')
->reset();
| Name | ||
|---|---|---|
register(string $event, callable $callback) |
Register event with given callback | self |
once(string $event, callable $callback) |
Register event only once with given callback | self |
registered(string $event) |
If event is registered | bool |
unregister(string $event, ?callable $callback) |
Unregister event with optional specific callback | self |
dispatch(string\|array $event) |
Dispatch event(s) | self |
reset() |
Remove all registered events | self |
Registering events
To register events, register and once are used, where once deletes the callback after it has been called.
<?php
(new Dispatcher)
->register('event', function() { /* called always */ });
->once('event', function() { /* called once */ })
Registered
Unregister
Unregister all callbacks for given event if no callback is applied. If a callback is applied, it only removes the callback from the event list.
<?php
$callback = function() {
/* some callback */
};
(new Dispatcher)
->register('some-event', $callback)
->unregister('some-event') // removes all callbacks from `some-event`
->unregister('some-event', $callback) // removes only `$callback` from the event list `some-event`
Dispatch
// globally
EventDispatcher::dispatch('some-event');
// locally
(new Dispatcher)->dispatch('some-event');
Reset
Remove all registered events
Callback trait for classes
Any class can implement the Callbackable interface with the DispatchesEvents trait. Doing so, 5 methods will
be forwarded to the dispatcher object.
| Name | Forwarded |
|---|---|
| on(array|string $event, callable $callback) | register |
| once(array|string $event, callable $callback) | once |
| off(array|string $event, ?callable $callback) | unregister |
| offAll() | reset |
| trigger() | dispatch |
<?php
use Symbiont\Dispatcher\Contracts\Callbackable;
use Symbiont\Dispatcher\Concerns\DispatchesEvent;
class SomeClass implements Callbackable {
use DispatchesEvent;
}
$some = new SomeClass;
$some
->on('something', function() {})
->once('once-only', function() {})
->trigger('something');
To customize the dispatcher object created by the DispatchesEvent trait, overwrite the makeDispatcherInstance method.
<?php
use Symbiont\Dispatcher\Contracts\Callbackable;
use Symbiont\Dispatcher\Concerns\DispatchesEvent;
class SomeClass implements Callbackable {
use DispatchesEvent {
DispatchesEvent::makeDispatcherInstance as private makeDispatcherInstanceOriginal
};
protected function makeDispatcherInstance() : Dispatching {
$dispatcher = new Dispatcher;
// anything you that needs be to change
return $dispatcher;
}
}
The DispatchesEvent has different method names in order to differentiate between a Dispatcher object and a class
implementing the DispatchesEvent trait.