ghostwriter / event-dispatcher

Provides an Event Dispatcher implementation for PHP

Home Page:https://github.com/ghostwriter/event-dispatcher

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Event Dispatcher

Compliance Supported PHP Version GitHub Sponsors Mutation Coverage Code Coverage Type Coverage Latest Version on Packagist Downloads

Provides an Event Dispatcher implementation for PHP.

Installation

You can install the package via composer:

composer require ghostwriter/event-dispatcher

Star ⭐️ this repo if you find it useful

You can also star (🌟) this repo to find it easier later.

Usage

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());

Event Subscriber

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());

Changelog

Please see CHANGELOG.md for more information what has changed recently.

Security

If you discover any security related issues, please email nathanael.esayeas@protonmail.com or create a Security Advisory instead of using the issue tracker.

License

The BSD-3-Clause. Please see License File for more information.

About

Provides an Event Dispatcher implementation for PHP

https://github.com/ghostwriter/event-dispatcher

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:PHP 100.0%