pleets/php-event-dispatcher

PSR-14 事件调度器

v1.0.0 2020-07-28 03:43 UTC

This package is auto-updated.

Last update: 2024-09-08 05:06:58 UTC


README

Quality Gate Status

事件调度是一种常见且经过良好测试的机制,允许开发者轻松且一致地将逻辑注入应用程序。此库是根据PSR-14开发的,并在psr/event-dispatcher中实现了所有接口。

您可以按照以下方式下载此项目。

git clone git@github.com:pleets/php-event-dispatcher.git

使用方法

创建事件

事件是由发射器产生的消息。它可以是任何任意的PHP对象。您可以通过扩展Event类来创建事件。

use Pleets\EventDispatcher\Event;

class DepositEvent extends Event
{
    public string $text;
    protected string $amount;
    private string $currency = 'USD';

    public function __construct($amount)
    {
        $this->amount = $amount;
        $this->text = 'We are preparing your deposit: '.$this->amount.$this->currency;
    }
}

创建监听器

监听器是任何期望传入事件的PHP可调用对象。零个或多个监听器可以传递相同的事件。监听器可以选择将其他异步行为入队。您可以通过扩展Listener类来创建监听器。

use Pleets\EventDispatcher\Event;
use Pleets\EventDispatcher\Listener;

class SendDepositNotification extends Listener
{
    public function handle(Event $event): void
    {
        $event->text = 'Your deposit was done!';
    }
}

创建监听器提供者和订阅事件

监听器提供者负责确定对于给定事件哪些监听器是相关的,但必须不调用监听器本身。监听器提供者可以指定零个或多个相关的监听器。您可以通过以下方式创建监听器提供者。

$provider = new ListenerProvider();

$deposit = new DepositEvent('127.00');
$provider->subscribe($deposit, new SendDepositNotification());

调度您的事件

调度器是一个服务对象,由发射器提供事件对象。调度器负责确保事件被传递给所有相关的监听器,但必须将负责监听器的确定推迟给监听器提供者。您可以通过以下方式调度您的事件。

$dispatcher = new Dispatcher($provider);
$dispatcher->dispatch($deposit);

所有监听器都将被通知此事件,并将执行。