effectra/event-dispatcher

Effectra 事件调度器包。

v1.1.0 2023-11-10 09:21 UTC

This package is auto-updated.

Last update: 2024-09-10 11:19:57 UTC


README

Effectra\EventDispatcher 是一个适用于 PHP 的多功能且轻量级的事件调度库,旨在简化您应用程序中事件的管理。它遵循 PSR-14 标准,提供了一种一致且可扩展的方式来处理事件、监听器和事件传播。

特点

  • PSR-14 兼容性:遵循事件调度的 PSR-14 标准,确保与其他 PHP 包和框架的互操作性。
  • 可停止的事件:支持可停止的事件,允许在必要时在传播过程中停止事件。
  • 灵活的监听器提供者:通过灵活的监听器提供者接口轻松注册和管理特定事件的监听器。
  • 一致的イベントハンドリング:确保按注册顺序同步执行监听器。
  • 简化 API:提供简单的 API 以调度事件,使它易于集成到您的项目中。

安装

您可以通过 Composer 安装 Effectra\EventDispatcher。在您的项目目录中运行以下命令

composer require effectra/event-dispatcher

用法

1. 创建事件

通过扩展 Effectra\EventDispatcher\Event 类来创建自定义事件类。此基类实现了 Psr\EventDispatcher\StoppableEventInterface,允许事件可停止。

namespace YourNamespace\Events;

use Effectra\EventDispatcher\Event;

class CustomEvent extends Event
{
    // Your event properties and methods
}

2. 注册监听器

通过定义可调用的函数或实现必要逻辑的类来创建监听器。使用 Effectra\EventDispatcher\ListenerProvider 类注册监听器。

namespace YourNamespace;

use Effectra\EventDispatcher\ListenerProvider;
use YourNamespace\Events\CustomEvent;

// Create a listener provider
$listenerProvider = new ListenerProvider();

// Register a listener for the CustomEvent
$listenerProvider->addListener(CustomEvent::class, function (CustomEvent $event) {
    // Handle the CustomEvent
});

// Dispatching the event
$event = new CustomEvent();
$dispatcher = new EventDispatcher($listenerProvider);
$dispatcher->dispatch($event);

3. 可停止的事件

要创建一个可停止的事件,在您的逻辑中使用 stopPropagation() 方法。这将防止进一步执行其他监听器。

namespace YourNamespace\Events;

use Effectra\EventDispatcher\Event;

class StoppableEvent extends Event
{
    public function process(): void
    {
        // Your event processing logic

        // Stop further propagation if a condition is met
        if ($condition) {
            $this->stopPropagation();
        }
    }
}

贡献

欢迎贡献!Fork 仓库,创建分支,进行更改,然后创建拉取请求。请确保您的 PR 描述清楚地描述了您所做的更改。

许可证

此包受 MIT 许可证 的许可。