berlioz/event-manager

PHP事件管理器/分发器,遵循PSR-14(事件分发器)标准。

v1.0.0 2021-09-08 20:46 UTC

This package is auto-updated.

Last update: 2024-09-09 03:38:27 UTC


README

Latest Version Software license Build Status Quality Grade Total Downloads

伯利兹事件管理器是一个PHP事件管理器/分发器,遵循PSR-14(事件分发器)标准。

更多信息,以及伯利兹框架的使用,请访问网站和在线文档:https://getberlioz.com

安装

Composer

您可以使用Composer安装伯利兹事件管理器,这是推荐的安装方法。

$ composer require berlioz/event-manager

依赖项

  • PHP ^8.0
    • psr/event-dispatcher

用法

分发器

初始化事件分发器

use Berlioz\EventManager\EventDispatcher;

$dispatcher = new EventDispatcher();

监听事件

use Berlioz\EventManager\EventDispatcher;

$callback = function($event) {
    // Do something
    return $event;
};

/** @var EventDispatcher $dispatcher */

// A named event
$dispatcher->addEventListener('event.name', $callback);

// Your event object
$dispatcher->addEventListener(MyEvent::class, $callback);

分发事件

/** @var EventDispatcher $dispatcher */
use Berlioz\EventManager\Event\CustomEvent;
use Berlioz\EventManager\EventDispatcher;

// A named event
$dispatcher->dispatch(new CustomEvent('event.name'));

// Your event object
$dispatcher->dispatch(new MyEvent());

优先级

您可以在监听器中定义优先级。最高优先级将在第一次执行中。

use Berlioz\EventManager\Listener\ListenerInterface;

/** ... */

// Normal priority (0)
$dispatcher->addEventListener('event.name', $callback, ListenerInterface::PRIORITY_NORMAL);
// High priority (100)
$dispatcher->addEventListener('event.name', $callback, ListenerInterface::PRIORITY_HIGH);
// Low priority (-100)
$dispatcher->addEventListener('event.name', $callback, ListenerInterface::PRIORITY_LOW);

优先级参数是整数;您可以使用整数值而不是常量来定义优先级。

添加代理分发器

您可以委托分发给另一个遵循PSR-14的分发器。只有当事件未停止时,才会调用委托的分发器。

use Berlioz\EventManager\EventDispatcher;

$dispatcher = new EventDispatcher();
$dispatcher->addEventDispatcher(new MyCustomDispatcher());

添加监听器提供者

您可以添加监听器提供者。提供者的调用顺序是添加顺序。

use Berlioz\EventManager\EventDispatcher;

$dispatcher = new EventDispatcher();
$dispatcher->addListenerProvider(new MyListenerProvider());

默认监听器

默认监听器是\Berlioz\EventManager\Listener\Listener。您可以定义自己的默认提供者,他必须实现\Berlioz\EventManager\Listener\ListenerInterface接口。

向分发器声明此提供者

use Berlioz\EventManager\EventDispatcher;
use Berlioz\EventManager\Provider\ListenerProvider;$myDefaultProvider = new ListenerProvider();

$dispatcher = new EventDispatcher(defaultProvider: $myDefaultProvider);