在ActiveRecord的init中写了一个简单的事件触发:

public function init(){
$event = new XxxEvent();
$this->on(self::EVENT_AFTER_UPDATE,[$event,'doSomeThing']);
parent::init();
}

就是这么简单,然后在程序中有一段触发:

public static xxx(){
self::updateAllCounters([],[]);
}

然后发现,死活没有触发。追了一下代码发现,updateAllCounters没有从AR走,而是直接从db->createCommand()->execute走了

于是在下面加了一行:

self::trigger(self::EVENT_AFTER_UPDATE);

然而直接报错,说是trigger不支持静态调用,哦。。。trigger是非静态方法。

于是最后只能用万能的call_user_func_array的方法了:

call_user_func_array([new self,'trigger'],[self::EVENT_AFTER_UPDATE]);

有点贱,但总算实现了。