Yii2之事件处理
通过事件(Event)处理,可以在某个特定时刻执行指定的代码,可以解耦代码,同时也增加了可维护性,通常,事件在客户端软件中比较好理解,比如onClick,onFocus,当点击按钮,获取到焦点时执行指定代码。在PHP中,事件的处理可能不太好理解,但是,只要理清了事件处理的过程,一切都会变得简单:
1.注册(或者说绑定)针对某个动作事件的处理器(handler)
2.触发某个动作事件
3.触发1中注册(绑定)的处理器
4.执行处理器中的代码
下面以 猫叫鼠跑 这个例子来简单说明Yii2中的事件处理。
Controller中的代码:
public function actionTest(){
$cat = new Cat('Tom');
$mouse = new Mouse('Jerry'); $data = array('msg'=>'miaow miaow miaow!');
//注册Cat::EVENT_AFTER_SHOUT事件响应(这里对Cat的EVENT_AFTER_SHOUT响应$mouse 的runout方法)
$cat->on(Cat::EVENT_AFTER_SHOUT, [$mouse,'runout'], $data);
//触发shout事件
$cat->shout();
}
Cat类代码:
public function actionTest(){
$cat = new Cat('Tom');
$mouse = new Mouse('Jerry'); $data = array('msg'=>'miaow miaow miaow!');
//注册Cat::EVENT_AFTER_SHOUT事件响应(这里对Cat的EVENT_AFTER_SHOUT响应$mouse 的runout方法)
$cat->on(Cat::EVENT_AFTER_SHOUT, [$mouse,'runout'], $data);
//触发shout事件
$cat->shout();
}
Mouse类代码:
class Mouse extends \yii\base\Component{
private $_name; function __construct($_name) {
$this->_name = $_name;
} public function runout($event){
//事件名称,事件数据,事件发送者
var_dump($event->name,$event->data,$event->sender);
echo 'Cat is shouting,I am a mouse so I need to run!';
}
}
执行actionTest时,会依次输出以下结果
I am a Cat,I am shouting!
Cat is shouting,I am a mouse so I need to run!
在Yii2中,事件分为三个级别:
1.实例事件(同上面的例子,仅对某个实例有效)
2.类事件(对整个类有效)
yii\base\Event::on(
Cat::className(), // 第一个参数表示事件发生的类
Cat::EVENT_AFTER_SHOUT, // 第二个参数表示是什么事件
function ($event) { // 对事件的处理
echo $event->sender;
}
);
3.全局事件(对全局有效)
Yii::$app->on('eventName', function ($event) {
echo get_class($event->sender); // 显示当前触发事件的对象的类名称
});
除了绑定事件外,某些场合也需要移除绑定的事件,常用方法有以下几种:
// 删除所有EVENT_AFTER_SHOUT事件的handler
$cat->off(Cat::EVENT_AFTER_SHOUT); // 删除一个对象的成员函数的handler
$cat->off(Cat::EVENT_AFTER_SHOUT, [$mouse, 'runout']); // 删除一个PHP全局函数的handler
$cat->off(Cat::EVENT_AFTER_SHOUT, 'global_onAfterShout');
来源地址:http://aiddroid.com/yii2-event/
Yii2之事件处理的更多相关文章
- Yii2的深入学习--事件Event
我们先来看下事件在 Yii2 中的使用,如下内容摘自 Yii2中文文档 事件可以将自定义代码“注入”到现有代码中的特定执行点.附加自定义代码到某个事件,当这个事件被触发时,这些代码就会自动执行.例如, ...
- yii2源码学习笔记(六)
Behvaior类,Behavior类是所有事件类的基类: 目录yii2\base\Behavior.php <?php /** * @link http://www.yiiframework. ...
- Yii2之事件
众所周知,yii的三大特性是:属性.事件.行为,上一篇博文简单讲解了yii中的属性,本文接着讲讲yii的事件. 事件是代码解耦的一种方式,设计业务流程的一种模式.在yii2.0中,通过Yii\base ...
- PHP观察者模式与Yii2.0事件
1.先看PHP观察者模式的实现: 想要使用事件.必须实现事件的基类.统一的addObserver和trigger方法 定义统一接口.所有的观察者都要实现此接口 //事件的基类 abstract cla ...
- Yii2基本概念之——事件(Event)
说起事件(event),我们可是一点都不陌生.现实生活当中的事件无处不在,比如你发了一条微博,触发了一条事件,导致关注你的人收到了一条消息,看到你发的内容:比如你通过支付宝买东西,付了款,触发一个事件 ...
- Yii2事件驱动的运行机制
最近一段时间正在作个一个项目,这个项目会系统逻辑比较复杂,使用PHP Yii2,使用事件驱动机制进行研发,下面就最近研究事件驱动机制的使用作以下总结: 流程如下: 1.要创建含有事件注入的类,一般这样 ...
- yii2深入理解之内核解析
一.前言 首先,yii2最为为数不多的PHP主流开源框架,受欢迎程度不亚于laravel和TP.个人认为,研究这些框架底层代码是非常有助于自身代码编程思想的提升和代码简化程度和质量的提升的. 那么,话 ...
- yii2.0 中的队列
a yii2 extension to make simple to use queue. yii2-queue让队列的使用在yii2中变得更轻松,她为各种队列组件的使用提供了一个标准的接口,您只需要 ...
- EasyUI Tabs + Yii2.0实现iframe方式打开页面(解决共用静态文件引入加载的问题)
在项目实际开发中,有将打开的各个链接页面隔离的需求(防止静态资源起冲突),这个时候常规思路就是使用iframe来实现!但遇到一个比较棘手的问题,当用easyui Tabs打开一个iframe页面时,怎 ...
随机推荐
- B树、B-树、B+树、B*树(转)
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...
- rabbit mq 安装
不知道为什么上不去erlang的官网,所以只能到中文社区来下载了. http://www.cnerlang.com/ 我下载的是下面这个版本 http://download.cnerlang.com/ ...
- 不得不看的Java代码性能优化总结
原文:https://blog.csdn.net/mr_smile2014/article/details/50112723 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么 ...
- C#中String.Empty、NULL与""三者的区别
String.Empty和""是一样的,都是空,习惯用string.empty. Null和他们就有区别了,就是没有值,也没分配地址,此处可以理解成什么都没有.
- 排序算法 C++代码实现
插入排序: 就像摸牌,摸一张插进去,找一个哨兵.从第二个開始,和前一个比較.小的话前移一位. #include <iostream> #include<stdlib.h> us ...
- linux内核参数分析
这是原来在51cto写的,现在都转到博客园来了 1.time_wait连接数过多,需要调整内核参数 http://blog.renhao.org/2010/07/setup-linux-kernel- ...
- WebStorm初次使用
1. ctrl + / : 单行注释2. ctrl + shift + / : 块注释 3:展开当前函数代码:Ctrl+“+”,收起当前代码:Ctrl+“-” 4:全局查找: Ctrl+Shift+F ...
- C# 系统应用之注冊表使用具体解释
在平时做项目时,我们有时会遇到注冊表的操作,比如前面我们须要获取IE浏览器地址栏的信息.获取"我的电脑"地址栏输入的目录信息.USB近期使用信息等.注冊表项是注冊表的基本组织单位, ...
- fastjson List<> 转Json , Json 转List<>
SerializeWriter:相当于StringBuffer JSONArray:相当于List<Object> JSONObject:相当于Map<String, Object& ...
- 关于工作与生活——HP大中华区总裁孙振耀撰文谈退休并畅谈人生
转自:http://blog.csdn.net/adaptiver/article/details/7494121 我有个有趣的观察,外企公司多的是25-35岁的白领, 40岁以上的员工很少,二三十岁 ...