jessegall / php-events
这个包的规范仓库似乎已不存在,因此该包已被冻结。
v0.1.1
2022-12-28 15:31 UTC
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/var-dumper: ^6.1
README
A simple event dispatcher for PHP that allows you to easily register listeners for specific events and dispatch those events to their listeners.
安装
composer require jessegall/php-events
使用方法
要使用事件调度器,首先需要创建Dispatcher类的实例
use JesseGall\Events\Dispatcher; $dispatcher = new Dispatcher();
注册监听器
要为事件注册监听器,可以使用listen方法
$dispatcher->listen('event_name', $listener);
$listener
参数可以是实现handle方法的类实例、具有handle方法的类名字符串或闭包
class MyListener { public function handle($payload) { // Handle the event } } // Register listener using an instance of a class $dispatcher->listen('event_name', new MyEventListener()); // Register a listener using a class $dispatcher->listen('event_name', MyEventListener::class); // Register a listener as a closure $dispatcher->listen('event_name', function ($payload) { // Handle the event });
您也可以通过传递监听器数组一次注册多个监听器
$dispatcher->listen('event_name', [$listener1, $listener2, $listener3]);
或者,您可以使用事件类来注册监听器。事件类是实现Event接口的类。要为事件类注册监听器,可以使用listen方法,就像使用字符串事件名一样
$dispatcher->listen(UserRegistered::class, $listener);
调度事件
要调度事件到所有已注册的监听器,可以使用dispatch方法
$dispatcher->dispatch('event_name', $payload);
当您使用字符串事件名调度事件时,可以将单个负载值作为参数传递给dispatch方法。当事件被调度时,此负载值将被传递到每个监听器的handle方法。
$dispatcher->dispatch('event_name', ['foo' => 'bar']); class MyListener { public function handle(array $payload) { // $payload will be ['foo' => 'bar'] } }
另一方面,如果您使用事件实例调度事件,事件对象将被作为负载传递到每个监听器的handle方法,当事件被调度时
$dispatcher->dispatch(new UserRegistered($user)); class MyListener { public function handle(UserRegistered $event) { // Payload will be the dispatched event instance } }