这里说的是通过行为的方式绑定事件
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!