YII框架的事件机制
一、什么是事件机制
解释:发生了一件事情,然后某些东西对这件事作出反应。
例子:假设发生了A同学结婚事件,然后B同学给份子钱反应,那么,B是怎么知道(监听)A事件的发生了呢,有两种办法。
扫描式:B不断的询问A是否要结婚。
绑定式:A要结婚的时候会及时通知B。
二、Yii框架的事件实现方式
Yii采用的是观察者模式来实现事件机制。
事件的监听方式,采用的是,绑定式。
绑定级别有,对象级别绑定,类级别绑定。
下面是代码实例。
1、在 vendor 目录下 新建 classmate 并制作 A同学,B同学类,C同学类。

A同学类。
<?php
namespace vendor\classmate;
use \yii\base\Component;
use \yii\base\Event; class MyEvent extends Event{ //继承事件类
public $message;
} class A_classmate extends Component //继承组件类
{
/**
* A 同学结婚
*/
function marry() {
echo 'A:我要结婚了!<br/>';
$msg = new MyEvent;
$msg->message = '多少随意<br/>';
// 事件结束的时候通知绑定在这个事件上的方法。
$this->trigger('marry',$msg); //第一个参数是事件名称,第二个参数是需要传递给监听方法的参数 它是一个对象
}
}
B同学类。
<?php
namespace vendor\classmate;
class B_classmate
{
/**
* B 同学给份子钱
*/
function member_money($e) {
echo $e->message; //接受到事件结束时候传递的参数
echo 'B:份子钱已备好,拿去不谢!<br/>';
}
}
C同学类。
<?php
namespace vendor\classmate;
class C_classmate
{
/**
* C 同学给份子钱
*/
function member_money($e) {
echo $e->message; //接受到事件结束时候传递的参数
echo 'C:份子钱已备好,拿去不谢!<br/>';
}
}
2、在控制器中调用上面的三个类。
<?php
namespace app\controllers;
use yii\web\Controller;
use \YII;
use vendor\classmate\A_classmate;
use vendor\classmate\B_classmate;
use vendor\classmate\C_classmate;
use \yii\base\Event; class TestController extends Controller
{
public function actionIndex() {
$A_classmate = new A_classmate();
$B_classmate = new B_classmate();
$C_classmate = new C_classmate();
//将事件与对象方法进行绑定 解绑方法是 off
$A_classmate->on('marry',[$B_classmate,'member_money']); //对象级别的事件绑定
Event::on(A_classmate::className(),'marry',[$C_classmate,'member_money']); //类级别的对象绑定
Event::on(A_classmate::className(),'marry',function(){ //类级别绑定匿名函数 注意对象级别也可以绑定匿名函数
echo 'D:呵呵,没空!<br/>';
});
//发生事件
$A_classmate->marry();
}
}
3、表现在浏览器上的效果是。

三、总结
yii通过这种事件机制,实现了在整个请求处理过程中,不改动原有逻辑的情况下,十分方便的添加其它处逻辑。
YII框架的事件机制的更多相关文章
- Yii框架zii.widgets.grid自定义按钮,ajax触发事件并提示
相关类手册: http://www.yiichina.com/api/CButtonColumn buttons 属性 public array $buttons; the configurati ...
- YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)
YII 框架源码分析 百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...
- 与《YII框架》不得不说的故事—5篇目录
与<YII框架>不得不说的故事—基础篇 第1章 课程目标 1-1 课程目标 (00:54) 第2章 课前知识准备 2-1 YII的启动和安装 (05:12) 2-2 YII请求处理流程 ( ...
- Yii框架 400 错误
YII 400错误 在YII框架中400错误是csrf校验失败的意思 csrf是什么? CSRF(Cross-site request forgery跨站请求伪造,也被称为"One Cli ...
- 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server
原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...
- 三级联动(在YII框架中)
//三级联动 //数据库代码过多就不上传了 //视图 <div class="area"> <table class="table"&g ...
- Atitit.事件机制 与 消息机制的联系与区别
Atitit.事件机制 与 消息机制的联系与区别 1. 消息/事件机制是几乎所有开发语言都有的机制,在某些语言称之为消息(Event),有些地方称之为(Message).1 2. 发布/订阅模式1 3 ...
- 重温javascript事件机制
以前用过一段时间的jquery感觉太方便,太强大了,各种动画效果,dom事件.创建节点.遍历.控件及UI库,应有尽有:开发文档也很多,网上讨论的问题更是甚多,种种迹象表明jquery是一个出色的jav ...
- 发布订阅 - 基于A2DFramework的事件机制实现
SUMMARY 能做什么 DEMO 原理图 应用场景 能做什么 A2DFramework的事件机制是基于发布订阅模式改进得来的一套API,中间件部分实现了msmq.redis.Supersocket可 ...
随机推荐
- C#使用共享内存与C++进行数据交互
现在做桌面的不多了.前端太流行了,大家都去搞前端了. 需求如下: 上层UI使用C#开发,数据采集模块使用C++开发.数据采集模块采集到的数据比较大,上层需要接收这一块数据并显示 进程间通信的方式有多种 ...
- WebSocket简单使用
很简单就不写太多介绍了,仅展示服务端代码!! Configure在Startup类的方法中添加WebSockets中间件 app.UseWebSockets(); 可以配置以下设置: KeepAliv ...
- open_vPGPv
加密 // create an instance of the library PGPLib pgp = new PGPLib(); // Import the main company public ...
- c#自制抽奖小程序
#region 第一部分界面设计 ; Button button = new Button(); Image[] images = new Image[N]; PictureBox[] picture ...
- SWD下载k60
转:JTAG各类接口针脚定义,含义及SWD接线方式 IAR设置如下
- js --策略模式
策略模式的定义: 将算法一个个的单独进行封装,并且使他们可以相互替换.此模式让算法的变化不会影响到使用算法的客户. 先回顾一下,我们在做项目的过程中,是不是经常会遇见因为业务逻辑的关系,我们会写好多的 ...
- Qt QListWidget
以下代码是 List Widget 添加数据项的代码,一般放在构造函数即可. /*********************添加数据项*********************/ QIcon icon1 ...
- Jmeter学习笔记(十六)——HTTP请求之content-type
一.HTTP请求Content-Type 常见的媒体格式类型如下: text/html : HTML格式 text/plain :纯文本格式 text/xml : XML格式 image/gif :g ...
- PHP传引用/作用域 问题
$arr = [1,2,3]; foreach($arr as &$v) { //nothing todo. } foreach($arr as $v) { //nothing todo. } ...
- Mybatis中传递多个参数的方法总结
一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList&q ...