Provides an Event Dispatcher implementation for PHP.
You can install the package via composer:
composer require ghostwriter/event-dispatcher
You can also star (🌟) this repo to find it easier later.
Registering and dispatching an Event Listener.
use Ghostwriter\EventDispatcher\Trait\EventTrait;
use Ghostwriter\EventDispatcher\EventDispatcher;
use Ghostwriter\EventDispatcher\ListenerProvider;
final class ExampleEvent
{
use EventTrait;
}
final class ExampleEventListener
{
public function __invoke(ExampleEvent $event): void
{
// ... print $event::class;
}
}
$provider = new ListenerProvider();
$provider->listen(ExampleEventListener::class)
$dispatcher = new EventDispatcher($provider);
$dispatcher->dispatch(new ExampleEvent());
Registering an Event Subscriber.
use Ghostwriter\EventDispatcher\Interface\ListenerProviderInterface;
use Ghostwriter\EventDispatcher\Interface\SubscriberInterface;
final class EventSubscriber implements SubscriberInterface {
/**
* @throws Throwable
*/
public function __invoke(ListenerProviderInterface $provider): void
{
$priority = 0;
// InvokableListener '::__invoke'
$provider->bind(
TestEvent::class,
TestEventListener::class,
$priority
);
// or
$provider->listen(
TestEventListener::class,
$priority
);
// FunctionListener
$provider->bind(
TestEvent::class,
'Ghostwriter\EventDispatcherTests\Fixture\listenerFunction',
$priority
);
// or
$provider->listen(
'Ghostwriter\EventDispatcherTests\Fixture\listenerFunction',
$priority
);
// StaticMethodListener
$provider->bind(
TestEvent::class,
TestEventListener::class . '::onStatic',
$priority
);
// or
$provider->listen(
TestEventListener::class . '::onStatic',
$priority
);
}
}
$provider = new ListenerProvider();
$provider->subscribe(EventSubscriber::class);
$dispatcher = new EventDispatcher($provider);
$dispatcher->dispatch(new TestEvent());
Please see CHANGELOG.md for more information what has changed recently.
If you discover any security related issues, please email nathanael.esayeas@protonmail.com
or create a Security Advisory instead of using the issue tracker.
The BSD-3-Clause. Please see License File for more information.