一、什么是事件机制

解释:发生了一件事情,然后某些东西对这件事作出反应。

例子:假设发生了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框架的事件机制的更多相关文章

  1. Yii框架zii.widgets.grid自定义按钮,ajax触发事件并提示

    相关类手册: http://www.yiichina.com/api/CButtonColumn   buttons 属性 public array $buttons; the configurati ...

  2. YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)

           YII 框架源码分析    百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...

  3. 与《YII框架》不得不说的故事—5篇目录

    与<YII框架>不得不说的故事—基础篇 第1章 课程目标 1-1 课程目标 (00:54) 第2章 课前知识准备 2-1 YII的启动和安装 (05:12) 2-2 YII请求处理流程 ( ...

  4. Yii框架 400 错误

    YII  400错误 在YII框架中400错误是csrf校验失败的意思 csrf是什么? CSRF(Cross-site request forgery跨站请求伪造,也被称为"One Cli ...

  5. 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server

    原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...

  6. 三级联动(在YII框架中)

    //三级联动 //数据库代码过多就不上传了 //视图 <div class="area">    <table class="table"&g ...

  7. Atitit.事件机制 与 消息机制的联系与区别

    Atitit.事件机制 与 消息机制的联系与区别 1. 消息/事件机制是几乎所有开发语言都有的机制,在某些语言称之为消息(Event),有些地方称之为(Message).1 2. 发布/订阅模式1 3 ...

  8. 重温javascript事件机制

    以前用过一段时间的jquery感觉太方便,太强大了,各种动画效果,dom事件.创建节点.遍历.控件及UI库,应有尽有:开发文档也很多,网上讨论的问题更是甚多,种种迹象表明jquery是一个出色的jav ...

  9. 发布订阅 - 基于A2DFramework的事件机制实现

    SUMMARY 能做什么 DEMO 原理图 应用场景 能做什么 A2DFramework的事件机制是基于发布订阅模式改进得来的一套API,中间件部分实现了msmq.redis.Supersocket可 ...

随机推荐

  1. spring boot 集成mybatis plus 含分页 完整教程

    一.添加依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus ...

  2. Vue通过WebSocket建立长连接

    使用场景: 在项目开发中,后端需要处理一连串的逻辑,或者等待第三方的数据返回来进行处理之后在返回给前端,可能时间会很长,而且前端也不知道后端什么时候能处理好(时间长的话会达到10分钟左右),如果采用普 ...

  3. ubuntu 使用alias 新增删除命令del替代rm

    alias del=trash #del命令别名删除文件至回收站 alias lt='ls /tmp' #lt命令显示回收站中的文件 alias cle=cleartrash #cle清除tmp文件夹 ...

  4. FreeRTOS任务状态信息查询

    uxTaskPriorityGet():查询某个任务的优先级 vTaskPrioritySet():改变某个任务的任务优先级 uxTaskGetSystemState():获取系统中任务状态 vTas ...

  5. live555的使用(转载)

    Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现 了对多种音视频编码格式的音视频数据的流 ...

  6. 在线生成二维码API接口

    1.http://s.jiathis.com/qrcode.php?url=kk 2.http://qr.liantu.com/api.php?text=kk 3.http://api.k780.co ...

  7. Lerp

    Lerp,就是返回两个值之间的插值,一般有三个参数.第一个参数为初始值,第二个参数为最终值,插值为0~1d的一个浮点数值,为0时为初始值,1时为最终值,为0到1之间的数值时返回一个混合数值.若第三个参 ...

  8. 浅析MySQL使用 GROUP BY 分组聚合与细分聚合

    原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7521278.html: 若有错误,请评论指出,谢谢! 1. 聚合函数(Aggregate Function ...

  9. Windows下学习C语言有哪些集成开发软件?

    前言 初学者学习C语言遇到的最大困难想必就是搭建环境了,相当多的初学者就是被搭建环境导致放弃了学习编程,就我自己的经验而言,初学编程不应该受限于环境,使用成熟好用的环境就可以了,之后熟悉一些可以在慢慢 ...

  10. helm笔记

    一.注意事项 1.values.yaml   中可以使用'#'号注释行,而/templates 下的文件不能用#号,如果要注释可以使用 {{/*  context  */}} 2.{{-    #忽略 ...