Yii2 静态方法触发事件如何实现?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]);
有点贱,但总算实现了。
来源:膘叔
|
以上是关于Yii2 静态方法触发事件如何实现?的主要内容,如果未能解决你的问题,请参考以下文章
asp.net html静态文件没有触发global.asax中的Application_BeginRequest事件的解决方法