Yii2 静态方法触发事件如何实现?


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]);

有点贱,但总算实现了。

来源:膘叔

时间: 2024-10-07 05:58:51

Yii2 静态方法触发事件如何实现?的相关文章

yii2中的事件和行为

Event 事件 事件是为了解耦... 注册事件 使用"on add"添加属性,注册事件 使用on方法注册事件. 第三个参数$data是监听函数使用的参数, 第四个$append参数设置为false则把改事件的方法给添加到最前面,会先触发 事件种类: 匿名函数:function($event){} 对象方法:[$object,"handleAdd"] 静态类方法:["Page","handleAdd"] 全局函数:"

原生js自动触发事件

熟悉jquery的童鞋都知道在jq中有一个方法可以自动触发事件,那就是trigger(),那么通过原生js又怎么模拟触发呢? js中添加一个主动触发事件的方法有dispatch.该方法能模拟用户行为,如点击(click)操作等. 标准使用dispatchEvent方法,IE6/7/8则使用fireEvent方法. dispatchEvent() 方法给节点分派一个合成事件. 语法如下: dispatchEvent(eventObj) eventObj 参数是一个描述事件的 ActionScrip

JQuery 自动触发事件

常用模拟 有时候,需要通过模拟用户操作,来达到单击的效果.例如在用户进入页面后,就触发click事件,而不需要用户去主动单击. 在JQuery中,可以使用trigger()方法完成模拟操作.例如可以使用下面的代码来触发id为btn的按钮的click事件. 1 $('#btn').trigger("click"); 这样,当页面加载完毕后,就会立刻输出想要的效果.也可以直接简写click(),来达到同样的效果: 1 $('#btn').click(); 触发自定义事件 trigger()

window.event.srcElement与window.event.target 触发事件的元素

IE浏览器支持window.event.srcElement , 而firefox支持window.event.target:<input type="text" onblur="alert(this.value)">//正确滴 ****************** <input type="text" onblur="method()">//错的啦<script>function meth

IE10、Chrome获取触发事件节点的源对象

记录学习JavaScript中遇到的知识点 1.IE中获取触发事件节点的源对象是通过属性srcElement,而Chrome则是以属性tagName获得.以如下函数getEventTarget(e)实现源对象的获取. 1 <script tyoe="text/JavaScript"> 2 //获取触发事件节点的源对象 3 function getEventTarget(e){ 4 e=window.event || e; 5 return e.srcElement || e

鼠标指针停止运动触发事件实例代码

鼠标指针停止运动触发事件实例代码:在js中有有内置的鼠标各种事件,比如click事件,mousemove事件等等,但是并没有鼠标指针停止运动这个事件,下面就利用jquery模拟实现此效果,希望能够给需要的朋友带来一定的帮助.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="ht

javascript鼠标双击时触发事件大全

javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown IE4.N4 按下鼠标时触发此事件 onmouseup IE4.N4 鼠标按下后松开鼠标时触发此事件 onmouseover IE3.N2 当鼠标移动到某对象范围的上方时触发此事件 onmousemove IE4.N4 鼠标移动时触发此事件 onmouseout IE4.N3 当鼠标离开某对象范围

option触发事件两种方法总结

<!doctype html><html><head> <meta charset="UTF-8"> <title>option触发事件</title> <script src="jquery-1.7.2.min.js"></script></head><body> <select name="" id="sel

javaScript 的option触发事件

先说jquery的option触发事件,很方便 $("option:selected")//这样就能直接触发选择的option了 在JavaScript中就显得比较麻烦,其实<option>本身没有触发事件方法,我们只有在select里的onchange方法里触发. <select id="pid" onchange="gradeChange(this.value)"> <option grade="1&q