Library for working with events in PSR-14 style for PHP 8.3+.
composer require locky42/leopard-eventsEventManager— static facade for registering and dispatching eventsListenerProvider— stores listenersEventDispatcher— calls listeners for an event
// Any simple class-object can be an event
class MyEvent {
public function __construct(public ?object $obj = null) {}
public $handled = false;
public $updated = false;
}
class AnotherEvent {}use Leopard\Events\EventManager;
use MyEvent;
// example
$user = Session::getUser();
EventManager::addEvent(new MyEvent($user), function ($event) {
$event->obj->isNew = false;
});$event = EventManager::doEvent(MyEvent::class);
if ($event->handled) {
// event was handled
}or
EventManager::doEvent(MyEvent::class);$obj = new \stdClass();
$obj->value = 10;
EventManager::addEvent(new MyEvent($obj), function ($event) {
$event->obj->value = 20;
});
EventManager::doEvent(MyEvent::class);
// $obj->value == 20EventManager::addEvent(new MyEvent(), [$this, 'updateObject']);EventManager::removeEvent(new MyEvent(), [$this, 'updateObject']);EventManager::getProvider()->clearListeners();Tests are located in tests/ and use PHPUnit.
Run:
./vendor/bin/phpunit --bootstrap vendor/autoload.php testsMIT