jessegall/php-events

这个包的规范仓库似乎已不存在,因此该包已被冻结。

v0.1.1 2022-12-28 15:31 UTC

This package is auto-updated.

Last update: 2023-06-28 16:34:39 UTC


README

A simple event dispatcher for PHP that allows you to easily register listeners for specific events and dispatch those events to their listeners.

安装

composer require jessegall/php-events

使用方法

要使用事件调度器,首先需要创建Dispatcher类的实例

use JesseGall\Events\Dispatcher;

$dispatcher = new Dispatcher();

注册监听器

要为事件注册监听器,可以使用listen方法

$dispatcher->listen('event_name', $listener);

$listener参数可以是实现handle方法的类实例、具有handle方法的类名字符串或闭包

class MyListener
{
    public function handle($payload)
    {
        // Handle the event
    }
}

// Register listener using an instance of a class
$dispatcher->listen('event_name', new MyEventListener());

// Register a listener using a class
$dispatcher->listen('event_name', MyEventListener::class);

// Register a listener as a closure
$dispatcher->listen('event_name', function ($payload) {
    // Handle the event
});

您也可以通过传递监听器数组一次注册多个监听器

$dispatcher->listen('event_name', [$listener1, $listener2, $listener3]);

或者,您可以使用事件类来注册监听器。事件类是实现Event接口的类。要为事件类注册监听器,可以使用listen方法,就像使用字符串事件名一样

$dispatcher->listen(UserRegistered::class, $listener);

调度事件

要调度事件到所有已注册的监听器,可以使用dispatch方法

$dispatcher->dispatch('event_name', $payload);

当您使用字符串事件名调度事件时,可以将单个负载值作为参数传递给dispatch方法。当事件被调度时,此负载值将被传递到每个监听器的handle方法。

$dispatcher->dispatch('event_name', ['foo' => 'bar']);

class MyListener
{
    public function handle(array $payload)
    {
        // $payload will be ['foo' => 'bar']
    }
}

另一方面,如果您使用事件实例调度事件,事件对象将被作为负载传递到每个监听器的handle方法,当事件被调度时

$dispatcher->dispatch(new UserRegistered($user));

class MyListener
{
    public function handle(UserRegistered $event)
    {
        // Payload will be the dispatched event instance
    }
}