max/event

Event based on the PSR-14 specification

dev-master 2022-10-11 10:36 UTC

This package is auto-updated.

Last update: 2023-01-22 06:05:10 UTC


README

如何使用

  1. 需要创建一个Listener类并实现\Max\Event\Contract\EventListenerInterface 中的listenprocess方法。listen 方法要求返回一个数组,数组内的值为该事件监听器监听的事件, process方法要求传入一个事件对象,该方法不需要返回值,例如
class UserStatusListener implements EventListenerInterface
{
    /**
    * 返回该监听器监听的事件
    * @return string[]
    */
    public function listen():array {
        return [
            \App\Events\UserRegistered::class,
        ];
    }

    /**
    * 触发事件后的处理
    * @param object $event
    */
    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);
  1. 事件调度
$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;
    }
}