- Notifications
You must be signed in to change notification settings - Fork2
Slim, powerful and full compatible PSR-14 event manager library for PHP
License
phoole/event
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Slim, powerful and full compatible PSR-14 event manager library for PHP.
Install via thecomposer utility.
composer require "phoole/event"or add the following lines to yourcomposer.json
{"require": {"phoole/event":"1.*" }}Full PSR-14 support
Support for classes want event-triggering capability with
EventCapableTraitSupport for classes want event-listening capability with
ListenerCapableTrait
usePhoole\Event\Provider;usePhoole\Event\Dispatcher;usePhoole\Event\Events\StoppableEvent;// create your own event classclass MyEventextends StoppableEvent {}// an invokable class for event handlingclass MyEventHandler{publicfunction__invoke(MyEvent$event) {echo'handling event...';return$event;// optional }}// initiate event dispatcher$events =newDispatcher(newProvider());// bind a callable with default priority 50 (0-100)$provider->attach(function(myEvent$event) {echo'triggered...';return$event;// optional});// bind a invokable object with priority 80$provider->attach(newMyEventHandler(),80);// fire the trigger, wil see output 'handling event...triggered...'$events->dispatch(newMyEvent());
Instead of using event name to trigger like many event libraries were doing.PSR-14 compliant event libraries now only support triggering with event object.By setting up a meaningful event object hierarchy, developers may achieve greatflexibility in event handling.
Listeners willONLY handle the events (and their subclasses) configuredwith the event parameter.
usePhoole\Event\Events\StoppableEvent;// my own event hierarchy topclass MyEventextends StoppableEvent{}// my user authentication eventclass MyAuthEventextends MyEvent{protected$userInfo;publicfunction__construct(array$userInfo) {$this->userInfo =$userInfo; }publicfunctiongetUserInfo():array {return$this->userInfo; }}$provider =newProvider();$events =newDispatcher($provider);// attach a listener to the event hierarchy top$provider->attach(function(MyEvent$event) {echo'Event'.get_class($event).' fired';return$event;// optional});// attach a listener for logging users$provider->attach(function(MyAuthEvent$event))use ($logger) {$logger->info(sprintf("User '%s' logged",$event->getUserInfo()['name']));return$event;// optional});...// upon user logged in, trigger the event// BOTH listeners will process THIS event$events->dispatcher(newMyAuthEvent($userInfo));
A listener class may implement the
ListenerCapableInterfaceand useListenerCapableTrait.usePhoole\Event\ListenerCapableTrait;usePhoole\Event\ListenerCapableInterface;// my listener classclass MyListenerimplements ListenerCapableInterface{use ListenerCapableTrait;// define on listener methodpublicfunctionMethodOne(MyEvent$event) {echo'handling MyEvent in MethodOne...'; }// define another listener methodpublicfunctionMethodTwo(MyEvent$event) {echo'handling MyEvent in MethodTwo...'; }// config this listenerprotectedfunctioneventsListening() {return ['MethodOne', ['MethodTwo',80]// with priority 80 ]; }}// global dispatcher & provider$provider =newProvider();$events =newDispatcher($provider);// set provider is enough$listener =newMyListener();$listener->setProvider($provider);// fire the event$events->dispatch(newMyEvent());
Along with container library
phoole/di, developer may not event worryabout setting up dispatcher, provider or injecting the provider.usePhoole\Di\Container;// initiate the listener with dependencies injected$listener = Container::create(MyListener::class);// fire the eventContainer::events()->dispatch(newMyEvent());
Triggering events in your classes
EventCapableInterfaceandEventCapableTraitgive developers the abilityof triggering events in their classes.usePhoole\Event\EventCapableTrait;usePhoole\Event\EventCapableInterface;class MyEventCapableimplements EventCapableInterface{use EventCapableTrait;publicfunctionmyMethod() {$this->triggerEvent(newMyEvent()); }}// global dispatcher & provider$provider =newProvider();$events =newDispatcher($provider);$eventCapable =newMyEventCapable();$eventCapable->setDispatcher($dispatcher);// will trigger an event$eventCapable->myMethod();
Along with container library
phoole/di, developer may not event worryabout setting up dispatcher, provider or injecting the dispatcher.// initiate object with dependencies injected$eventCapable = Container::create(MyEventCapable::class);// will trigger an event$eventCapable->myMethod();
$ composertestPHP >= 7.2.0
Phoole/base 1.*
About
Slim, powerful and full compatible PSR-14 event manager library for PHP
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.
