这里说的是通过行为的方式绑定事件
1.定义行为事件类: MyBehavior.php
- <?php
- namespace myapp\frontend\code\ECM\Customer\events;
- use yii\db\ActiveRecord;
- use yii\base\Behavior;
- use myapp\frontend\code\ECM\Cms\controllers\IndexController;
- class MyBehavior extends Behavior
- {
- // 其它代码
- const EVENT_HELLO = 'myhello';
- public function events()
- {
- return [
- self::EVENT_HELLO => 'hello',
- ];
- }
- public function hello($event)
- {
- \Yii::info($event->message,'mylog');
- }
- }
- ?>
2.定义数据格式类:
- <?php
- namespace myapp\frontend\code\ECM\Customer\events;
- use Yii;
- use yii\base\Model;
- use yii\base\Event;
- /**
- * ContactForm is the model behind the contact form.
- */
- class MessageEvent extends Event
- {
- public $message;
- }
3.在行为函数中绑定定义的 行为事件
- <?php
- namespace myapp\frontend\code\ECM\Cms\controllers;
- use Yii;
- use myapp\frontend\code\ECM\BaseController;
- use myapp\frontend\code\ECM\Customer\events\MyBehavior;
- use myapp\frontend\code\ECM\Customer\events\Ha;
- use myapp\frontend\code\ECM\Customer\events\MessageEvent;
- class IndexController extends BaseController
- {
- # 定义Event的名字
- //const EVENT_HELLO = 'my hello';
- public function behaviors()
- {
- return [
- # 命名行为, 绑定行为事件
- # 绑定后 会通过这个类的events() 返回所有的事件数组,然后全部绑定。
- # 道理就是:通过行为的方式绑定对应的event , 和on函数绑定一个原理
- 'myBehavior2' => MyBehavior::className(),
- ];
- }
- public function actionIndex()
- {
- #定义传递数据的格式 Event
- $event = new MessageEvent;
- # 赋值
- $event->message = 'good';
- # 触发事件
- # 这里已经不需要on绑定,因为在行为中已经绑定完成
- $this->trigger(MyBehavior::EVENT_HELLO,$event);
- return $this->render('index');
- }
- }
4.打印日志查看:tail -f app/runtime/logs/my.log
- 2015-11-17 11:50:54 Array[info][mylog] good
- in /www/web/develop/test/erp/myapp/frontend/code/ECM/Customer/events/MyBehavior.php:21
- in /www/web/develop/test/erp/myapp/frontend/code/ECM/Cms/controllers/IndexController.php:36
已经输出对应的 $EventMessage->mesage值。
good!