mmdm/sim-event-dispatcher

A simple yet nice event dispatcher

v2.0.0 2021-04-02 19:11 UTC

This package is auto-updated.

Last update: 2024-04-29 04:27:37 UTC


README

A library for event management.

Install

composer

composer require mmdm/sim-event-dispatcher

Or you can simply download zip file from github and extract it, then put file to your project library and use it like other libraries.

Just add line below to autoload files:

require_once 'path_to_library/autoloader.php';

and you are good to go.

How to use

// we need event provider to add events to that
$event_provider = new EventProvider();

// also we need closure provider to add closures to that
$closure_provider = new ClosureProvider();

// then use their methods
$event_provider->addEvent(new Event('boot'))
    ->addEvent(new Event('close'));
//-----
$closure_provider->addClosure($nameOfClosureOrKey, function () {
    // define closure functionality
});

// to instanciate an emitter object,
// use event provider and closure provider,
// from above
$emitter = new Emitter($event_provider, $closure_provider);

// now work with listeners
$emitter->addListener($nameOfEvent, $nameOfClosureOrKey);
$emitter->removeListener($nameOfEvent, $nameOfClosureOrKey);

// finally dispatch event where you want
$emitter->dispatch($nameOfEvent);

Available functions

EventProvider

  • addEvent(IEvent $event): IEventProvider

This method add an event to the provider

// to add an event
$event_provider->addEvent(new Event('cartOnBoot'));
  • removeEvent(string $event_name): IEventProvider

This method remove an event from the provider

// to remove an event
$event_provider->removeEvent('cartOnBoot');
  • getEvent(string $event_name): IEvent

This method gets an event from the provider

// to get an event
$event_provider->getEvent('cartOnBoot');
  • hasEvent(string $event_name): bool

This method checks to see if an event is exist in provider

// check if an event exists
$event_provider->hasEvent('cartOnBoot');

ClosureProvider

  • addClosure($key, $closure): IClosureProvider

This method add a closure to provider

// to add a closure
$closure_provider->addClosure($closureKeyOrName, function () {
    // define closure functionality
});
  • removeClosure($key): IClosureProvider

This method removes a closure from provider

// to remove a closure
$closure_provider->removeClosure($closureKeyOrName);
  • getClosure($key): Closure

This method gets a closure from provider

// to get a closure
$closure_provider->getClosure($closureKeyOrName);
  • hasClosure($key): bool

This method checks to see if a closure is exist in provider

// check if a closure exists
$closure_provider->hasClosure('cartOnBoot');

Emitter

  • addListener(string $event_name, string $closure_name, int $priority = 0): IEmitter

This method add a listener to emitter

Note: If you need some listeners to emit faster than others, then you should pass priority as a number.(Higher value means higher priority)

// to add a listener
$emitter->addListener('cartOnBoot', 'cart_boot');
// or with a higher priority
$emitter->addListener('cartOnBoot', 'cart_boot', 5);
  • removeListener(string $event_name, string $closure_name): IEmitter

This method removes a listener from emitter

// to remove a listener
$emitter->removeListener('cartOnBoot', 'cart_boot');
  • removeAllListeners(string $event_name): IEmitter

This method remove all listeners of an event from emitter

Note: Now you can pass wild cards (regex) as event too!

// to remove a listener
$emitter->removeAllListeners('cartOnBoot');

// to remove a listener with wild card
//
// code below will find all events like
// [cart:boot], [cartOnBoot], etc.
// and remove them all
$emitter->removeAllListeners('cart:?.*');
  • getListener(string $event_name): array

This method gets all listeners of an event from emitter

// to get all listeners of an event
$emitter->getListener('cartOnBoot');
  • getAllListeners($wild_card = null): array

This method gets all listeners from emitter

Note: You can filter listeners with their events through an extra parameter $wild_card that is a regex

// to get all listeners
$emitter->getAllListeners();

// to get all events with [cart:boot] and [cart:orders]
$emitter->getAllListeners('cart:(boot|orders)');

License

Under MIT license.