菜鸟常忽略的基础 - 在配置里定义事件 ¶
作者:KK
发表日期:2016.10.15
先看看基本的on方法事件监听方式 ¶
比如yii\web\Response有一个事件是yii\web\Response::EVENT_BEFORE_SEND事件,表示响应数据发送前
那如果我们想要在数据发送给用户前做点什么事,基本的用法就是通过代码来绑定事件:
Yii::$app->response->on(yii\web\Response::EVENT_BEFORE_SEND, function($event){
if(is_string($event->sender->data)){
$event->sender->data = '以下是HTML内容:' . $event->sender->data;
}
});
但官方好像没有专门地讲过可以通过配置来监听事件,虽然略为提过,但不是专门讲这个的
来,通过配置监听 ¶
好了其实我们可以在配置文件里这样来监听事件:
先要知道你的事件名称,通过Response的源代码可以得知EVENT_BEFORE_SEND这个常量的值是
beforeSend
,或者你echo Yii::$app->response::EVENT_BEFORE_SEND
也是能看到这个值的配置就是定义一个个类的属性嘛,第一层是定义app的属性,components里就是定义每一个组件的属性
要通过配置实现监听事件,这回就不是定义类的属性了,写法是这样的,在key的前面加个on
:
return [
//Application的配置
'components' => [
//其它组件的配置
'response' => [
//重点在这里,先写on加空格,然后就写事件的标记值
'on beforeSend' => function($event){
if(is_string($event->sender->data)){
$event->sender->data = '<p>维护通知:本站将于15号凌晨1点到3点暂时关闭访问</p>' . $event->sender->data;
}
}
],
],
];
在配置里定义类的事件就是on 事件标记符
这样的写法来定义要监听的事件
动态配置创建对象时附加监听 ¶
$config = [
'name' => 'Jay',
'age' => 11,
'on init' => function(){
echo '模型初始化了';
},
'on beforeInsert' => function(){
echo '要insert入库了';
},
];
$user = new User($config); //模型初始化了
$user->save(); //要insert入库了