max/event

Event based on the PSR-14 specification

0.1.0 2021-11-20 01:25 UTC

This package is auto-updated.

Last update: 2021-12-03 01:49:19 UTC


README

如何使用

  1. 需要创建一个Listener类并实现\Max\Event\Contracts\EventListenerInterface 中的listenprocess方法。listen方法要求返回一个数组,数组内的值为该事件监听器监听的事件, process方法要求传入一个事件对象,该方法不需要返回值,例如
class UserStatusListener implements EventListenerInterface
{

    public function listen():array {
        return [
            \App\Events\UserRegistered::class,
        ];
    }

    public function process(object $event): void
    {
        $event->user = false;
    }

}
  1. 需要创建一个Event类,例如
class UserRegistered
{
    public $user;

    public function __construct($user)
    {
        $this->user = $user;
    }
}
  1. 实例化一个ListenerProvider, 构造函数需要传入所有监听器对象
$listenerProvider = new ListenerProvider(...[new UserStatusListener]);
  1. 实例化调度器,给构造函数传入listenerProvider实例
$dispatcher = new \Max\Event\EventDispatcher($listenerProvider);

5.事件调度

$user = User::find(1);

$event = $dispatcher->dispatch(new UserRegistered($user));
  1. 可终止事件

事件实现StoppableEventInterface接口中的isPropagationStopped方法,并且返回true,则不会触发该事件之后的事件

class UserRegistered implements StoppableEventInterface
{
    public $user;

    public function __construct($user)
    {
        $this->user = $user;
    }

    public function isPropagationStopped() : bool 
    {
        return true;
    }
}