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 listenersListenerProvider— in-memory listener storage with priority sortingEventDispatcher— dispatch pipeline implementation
Event Registration
You can register a listener by:
- Event object (stores payload template)
- 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
其他信息
- 授权协议: MIT
- 更新时间: 2025-10-24