麦子学院 2016-12-12 13:49
Yii2 静态方法中怎么触发事件
回复:0 查看:2514
Yii框架是php
中最常用的开发框架之一,本文和大家分享的就是Yii2框架的静态方法中,触发事件是如何实现的,希望本文的分享对大家有所帮助。
在ActiveRecord
的
init
中写了一个简单的事件触发
:
PHP
代码
public
function
init(){
$event =
new XxxEvent();
$this->on(
self::EVENT_AFTER_UPDATE,[$event,'doSomeThing']);
parent::init();
}
就是这么简单,然后在程序中有一段触发:
PHP
代码
public
static
xxx(){
self::updateAllCounters([],[]);
}
然后发现,死活没有触发。追了一下代码发现,updateAllCounters
没有从
AR
走,而是直接从
db->createCommand()->execute
走了
于是在下面加了一行:
self::trigger( self::EVENT_AFTER_UPDATE );
然而直接报错,说是trigger
不支持静态调用,哦。。。
trigger
是非静态方法。
于是最后只能用万能的call_user_func_array
的方法了:
PHP
代码
call_user_func_array([
new
self,'trigger'],[
self::EVENT_AFTER_UPDATE]);
有点贱,但总算实现了。
来源:
膘叔
|