定制 locky42/leopard-events 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

locky42/leopard-events

最新稳定版本:1.1.1

Composer 安装命令:

composer require locky42/leopard-events

包简介

A library for handling PSR-14 events.

README 文档

README

locky42/leopard-events is a lightweight PSR-14 style event library for PHP 8.3+.

Installation

composer require locky42/leopard-events

Core Classes

  • EventManager — static facade for registering/removing/dispatching listeners
  • ListenerProvider — in-memory listener storage with priority sorting
  • EventDispatcher — dispatch pipeline implementation

Event Registration

You can register a listener by:

  1. Event object (stores payload template)
  2. Event class string (no object instantiation at registration time)
use Leopard\Events\EventManager;

class MyEvent {
    public function __construct(public ?object $obj = null) {}
    public bool $handled = false;
}

// Object registration
EventManager::addEvent(new MyEvent(), function (MyEvent $event) {
    $event->handled = true;
});

// Class-string registration (safe even if constructor has required args)
EventManager::addEvent(MyEvent::class, function (MyEvent $event) {
    $event->handled = true;
});

Dispatching

Dispatch by class name:

$event = EventManager::doEvent(MyEvent::class);

Or pass constructor arguments:

$payload = new \stdClass();
$payload->value = 10;

$event = EventManager::doEvent(MyEvent::class, $payload);

Shared Event State Between Listeners

When dispatching, listeners for the same event class receive the same event instance in the dispatch cycle. Mutations made by one listener are visible to subsequent listeners.

EventManager::addEvent(MyEvent::class, function (MyEvent $event) {
    $event->handled = true;
});

EventManager::addEvent(MyEvent::class, function (MyEvent $event) {
    // sees handled === true
});

Listener Priority

addEvent(..., $priority) supports integer priorities.

EventManager::addEvent(MyEvent::class, $firstListener, -100);
EventManager::addEvent(MyEvent::class, $secondListener, 0);
EventManager::addEvent(MyEvent::class, $thirdListener, 100);

Listeners are sorted by priority before dispatch.

Removing and Clearing Listeners

EventManager::removeEvent(new MyEvent(), $listener);
EventManager::getProvider()->clearListeners();

removeEvent requires an event object (not class string).

Testing

./vendor/bin/phpunit --bootstrap vendor/autoload.php tests

License

MIT

统计信息

  • 总下载量: 19
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 4
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-10-24