justcoded / yii2-event-listener
此包已被废弃且不再维护。没有推荐替代包。
Yii2 事件监听器
1.0.2
2019-06-24 17:11 UTC
Requires
- php: >=7.0.0
- yiisoft/yii2: ~2.0.11
This package is auto-updated.
Last update: 2023-09-25 05:44:27 UTC
README
Yii2 事件监听器
一个简单的事件监听器注册组件和基础抽象类,用于实现监听器或观察者。
安装
安装此扩展的首选方法是使用composer。
运行以下命令:
composer require --prefer-dist justcoded/yii2-event-listener "*"
或添加以下内容到你的composer.json文件中的require部分:
"justcoded/yii2-event-listener": "*"
组件配置
要使用事件监听器组件,您需要在应用程序配置中配置组件数组,并将组件名称添加到bootstrap数组中。
'components' => [ 'listener' => [ 'class' => \justcoded\yii2\eventlistener\components\EventListener::class, 'listeners' => [ ... ], 'observers' => [ ... ], ], ],
'bootstrap' => ['log', 'listener'],
使用
监听器
监听器是一个单独的操作,可以在某些事件上执行。要注册监听器,您需要创建一个简单的类
<?php namespace app\listeners; use justcoded\yii2\eventlistener\listeners\Listener; use yii\base\Event; /** * Class SendUserGreeting */ class SendUserGreeting extends Listener { /** * Handle action on event trigger. * * @param Event $event * * @return void */ public function handle(Event $event) { /* @var \app\models\User $sender */ $sender = $event->sender; // TODO: write your code here, for example, send user greeting email after it was registered or created. } }
之后,您需要在组件内部的'listeners'配置数组中注册它
'components' => [ 'listener' => [ 'class' => \justcoded\yii2\eventlistener\components\EventListener::class, 'listeners' => [ \app\models\User::class => [ \app\models\User::EVENT_AFTER_INSERT => \app\listeners\SendUserGreeting::class, ], ], ], ],
观察者
观察者是一个类,可以订阅同一模型的不同事件。要创建观察者,您需要从基本的观察者类扩展它,并创建events()
方法和处理这些事件的相应方法。
示例
<?php namespace app\observers; use app\controllers\SiteController; use justcoded\yii2\eventlistener\observers\Observer; use yii\base\Event; /** * Class UserObserver */ class SiteControllerObserver extends Observer { public function events() { return [ SiteController::EVENT_BEFORE_ACTION => 'before', SiteController::EVENT_AFTER_ACTION => 'after', ]; } /** * Handle before action event * * @param Event $event * * @return void */ public function before(Event $event) { /* @var SiteController $sender */ $sender = $event->sender; // TODO: write your code here. } /** * Handle after action event * * @param Event $event * * @return void */ public function after(Event $event) { /* @var SiteController $sender */ $sender = $event->sender; // TODO: write your code here. } }
之后,您需要在组件内部的'observers'配置数组中注册它
'components' => [ 'listener' => [ 'class' => \justcoded\yii2\eventlistener\components\EventListener::class, 'observers' => [ app\controllers\SiteController::class => \app\observers\SiteControllerObserver::class, app\models\User::class => \app\observers\UserObserver::class, ], ], ],
ActiveRevordObserver
该包还包含一个名为ActiveRecordObserver的特定类。此类已声明所有ActiveRecord事件及其处理方法
- inserting()
- inserted()
- updating()
- updated()
- deleting()
- deleted()
- validating()
- validated()
- refreshed()
- initialized()
示例
<?php namespace app\observers; use justcoded\yii2\eventlistener\observers\ActiveRecordObserver; use yii\db\AfterSaveEvent; /** * Class UserObserver */ class UserObserver extends ActiveRecordObserver { /** * Handle AFTER_UPDATE ActiveRecord event. * * @param AfterSaveEvent $event * * @return void */ public function updated(AfterSaveEvent $event) { /* @var \app\models\User $sender */ $sender = $event->sender; // TODO: write your code here. } }