幽灵作者/事件调度器

事件调度器实现。

5.0.2 2024-07-15 22:32 UTC

This package is auto-updated.

Last update: 2024-09-01 21:06:58 UTC


README

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

为PHP提供事件调度器实现。

安装

您可以通过composer安装此包

composer require ghostwriter/event-dispatcher

如果您认为这个仓库有用,请星标 ⭐️ 它

您也可以星标 (🌟) 这个仓库,以便稍后更容易找到。

使用方法

注册和分发事件监听器。

use Ghostwriter\EventDispatcher\EventDispatcher;
use Ghostwriter\EventDispatcher\ListenerProvider;

// Create an event class
final class ExampleEvent
{
}

// Create an Event Listener
final class ExampleEventListener
{
    public function __invoke(ExampleEvent $event): void
    {
        // Handle the event, e.g., print the event class name
        // echo $event::class;
    }
}

// Create a ListenerProvider
$provider = ListenerProvider::new(); // or new ListenerProvider()

// Bind the Listener to the Event
$provider->bind(ExampleEvent::class, ExampleEventListener::class);

// Create an EventDispatcher
$dispatcher = EventDispatcher::new($provider); // or new EventDispatcher($provider)

// Dispatch the Event.
$event = $dispatcher->dispatch(new ExampleEvent());

// Assert the Event is the same as the dispatched Event
assert($event instanceof ExampleEvent);

事件订阅者

注册事件订阅者。

use Ghostwriter\EventDispatcher\Interface\ListenerProviderInterface;
use Ghostwriter\EventDispatcher\Interface\SubscriberInterface;
use Override;

final class EventSubscriber implements SubscriberInterface {
    /**
     * @throws Throwable
     */
    #[Override]
    public function __invoke(ListenerProviderInterface $provider): void
    {
        // InvokableListener '::__invoke'
        $provider->bind(
            TestEvent::class, 
            TestEventListener::class,
        );
    }
}

// Create a ListenerProvider
$provider = ListenerProvider::new(); // or new ListenerProvider()

// Subscribe the EventSubscriber
$provider->subscribe(EventSubscriber::class);

// Create an EventDispatcher
$dispatcher = EventDispatcher::new($provider); // or new EventDispatcher($provider)

// Dispatch the Event.
$event = $dispatcher->dispatch(new TestEvent());

// Assert the Event is the same as the dispatched Event
assert($event instanceof TestEvent);

变更日志

请参阅 CHANGELOG.md 获取最近更改的更多信息。

安全

如果您发现任何与安全相关的问题,请发送电子邮件至 nathanael.esayeas@protonmail.com 或创建一个 安全公告 而不是使用问题跟踪器。

许可证

BSD-3-Clause。请参阅 许可证文件 获取更多信息。