max/event

This package is abandoned and no longer maintained. The author suggests using the next/event package instead.

Event based on the PSR-14 specification

0.1 2023-10-31 02:27 UTC

This package is auto-updated.

Last update: 2023-10-31 02:57:42 UTC


README

如何使用

创建监听器

use Next\Event\Contract\EventListenerInterface;

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;
    }
    
    /**
    * 监听器优先级
    * 如果一个事件被多个监听器监听,那么执行顺序可以通过该方法调整
    * 优先级数字越大,优先级越高,越先执行
    * @return int
    */
    public function getPriority(): int 
    {
        return 0;
    }
}

如果你不需要调整优先级,可以直接继承Next\Event\EventListener

需要创建一个事件类

class UserRegistered
{
    public $user;

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

实例化ListenerProvider, 使用addListener添加监听器

$listenerProvider = new ListenerProvider();
$listenerProvider->addListener(new UserStatusListener());

实例化调度器,给构造函数传入ListenerProvider实例

$dispatcher = new \Next\Event\EventDispatcher($listenerProvider);

事件调度

$user = User::find(1);

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

可终止事件

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

class UserRegistered implements StoppableEventInterface
{
    public $user;

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

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