Swift51.com
麦子学院 头像
麦子学院  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]);
  有点贱,但总算实现了。
来源: 膘叔