laxity7 / yii2-event-service
Yii2事件提供了简单的观察者模式实现,允许您订阅和监听应用程序中发生的各种事件。
v1.0.0
2024-09-18 07:15 UTC
Requires
- php: >=7.4|>=8.0
This package is auto-updated.
Last update: 2024-09-18 07:19:42 UTC
README
Yii2事件提供了简单的观察者模式实现,允许您订阅和监听应用程序中发生的各种事件。
安装
通过Composer安装
composer require laxity7/yii2-event-service
如何使用
1. 创建一个事件类
它将是包含事件数据的任何类。您也可以使用默认的Yii2事件类 yii\base\Event
。
例如
namespace App\Events; use yii\base\Event; final readonly class PaymentEvent { public function __construct( public float $amount, public string $currency, public string $description, ) { } }
2. 创建一个监听器类
它将是一个包含 handle
或 __invoke
方法的类,当事件被分发时将调用该方法。该方法必须接受一个事件对象作为参数。
例如
namespace App\Events\listeners; use App\Events\PaymentEvent; final class PaymentListener { //public function __invoke(PaymentEvent $event): void public function handle(PaymentEvent $event): void { Yii::info('Event: ' . get_class($event) . ' Trigger: ' . __METHOD__, __METHOD__); } }
注意:您也可以使用闭包作为监听器。闭包必须接受一个事件对象作为参数。
3. 订阅事件
将以下代码添加到您的配置文件中
'components' => [ 'eventDispatcher' => [ 'class' => \Laxity7\Yii2\Components\EventServiceProvider::class, 'listen' => [ \App\Events\PaymentEvent::class => [ \App\Events\listeners\PaymentListener::class, // listener class function (\App\Events\PaymentEvent $event) { // closure Yii::info('Event: ' . get_class($event) . ' Trigger: ' . __METHOD__, __METHOD__); }, ], ], ], ],
4. 分发事件
use App\Events\PaymentEvent; use Laxity7\Yii2\Components\Event; $event = new PaymentEvent(100, 'USD', 'Payment for goods'); \Yii::$app->eventDispatcher->dispatch($event); // or use the helper Event::dispatch($event);