文档章节

Yii2之事件处理

 小田天
发布于 2016/11/17 11:30
字数 642
阅读 8
收藏 0

Yii2之事件处理

通过事件(Event)处理,可以在某个特定时刻执行指定的代码,可以解耦代码,同时也增加了可维护性,通常,事件在客户端软件中比较好理解,比如onClick,onFocus,当点击按钮,获取到焦点时执行指定代码。在PHP中,事件的处理可能不太好理解,但是,只要理清了事件处理的过程,一切都会变得简单:

1.注册(或者说绑定)针对某个动作事件的处理器(handler)

2.触发某个动作事件

3.触发1中注册(绑定)的处理器

4.执行处理器中的代码

 

下面以 猫叫鼠跑 这个例子来简单说明Yii2中的事件处理。

Controller中的代码:

 

1

2

3

4

5

6

7

8

9

10

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类代码:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class Cat extends \yii\base\Component{

    private $_name;

    const EVENT_AFTER_SHOUT = 'afterShout';

    

    function __construct($name) {

        $this->_name = $name;

    }

    

    public function shout(){

        echo 'I am a Cat,I am shouting!';

        //触发事件处理

        $this->trigger(self::EVENT_AFTER_SHOUT);

    }

}

 

Mouse类代码:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

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时,会依次输出以下结果

 

1

I am a Cat,I am shouting!

 

 

1

Cat is shouting,I am a mouse so I need to run!

 

 

在Yii2中,事件分为三个级别:

1.实例事件(同上面的例子,仅对某个实例有效)

2.类事件(对整个类有效)

 

1

2

3

4

5

6

7

yii\base\Event::on(

    Cat::className(),                     // 第一个参数表示事件发生的类

    Cat::EVENT_AFTER_SHOUT,                  // 第二个参数表示是什么事件

    function ($event) {                      // 对事件的处理

        echo $event->sender;

    }

);

3.全局事件(对全局有效)

 

1

2

3

Yii::$app->on('eventName', function ($event) {

    echo get_class($event->sender);        // 显示当前触发事件的对象的类名称

});

 

 

除了绑定事件外,某些场合也需要移除绑定的事件,常用方法有以下几种:

PHP

 

1

2

3

4

5

6

7

8

// 删除所有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');

 

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 79
码字总数 49841
作品 0
怀化
yii2 - Behavior 实例及源码分析

Behavior 的简述 行为简单来说是组件的扩展,可以对组件的属性,方法,事件 (yii2组件的三大要点)进行扩展而无需改动组件现有的代码逻辑。即此行为所拥有的属性,方法,事件,都会被绑定它...

big_cat
2016/06/01
811
0
yii2 - Event 实例及源码分析

yii2 可以方便的使用 Event 组件基类 来实现 注册事件和监听触发 机制,每个事件都有自身的事件队列 首先要知道,yii2的事件一共有三类:对象级,类级,全局 Yii::$app 级 对象和 全局是通过...

big_cat
2016/05/27
188
0
从配置文件的角度去了解Yii2

前言 Yii2是一个奇特的框架,其牺牲了现在盛行的解耦设计,用一个高度耦合的结构提供给开发者一个方便的几类抽象,Application,Module,Component,甚至是ServiceLocator.想让对象具备哪类特征就直...

Vett
2017/12/23
0
0
Yii2框架图解

Yii2框架图解 Love冥天个人博客-关注IT|PHP|互联网|php个人博客交流2017-11-281 阅读 yii2Yii2 图片根据Yii类参考手册,Yii源代码,开发常用方法构成. 1.yii2 控制器类图 2.yii2 cookie 类图...

Love冥天个人博客-关注IT|PHP|互联网|php个人博客交流
2017/11/28
0
0
yii2项目实战之配置

作者:白狼 出处:http://www.manks.top/document/yii2-blog-config.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律...

白狼栈
2016/08/01
24
0

没有更多内容

加载失败,请刷新页面

加载更多

设计模式之 明确责任 观察者模式 状态模式 责任链模式

观察者模式是任务分发的一种模式。 如果认为我们设计的系统的各个模块(或子系统)的最终目的是完成共同任务,那么这个任务如何分配到多个模块的就是我们遇到的第一个问题。简单设计场合我们...

backbye
13分钟前
2
0
14-利用思维导图梳理JavaSE-大汇总

14-利用思维导图梳理JavaSE-Java基础知识大汇总 主要内容 1.对象入门 2.一切都是对象 3.程序流程控制 4.初始化和消除 5.权限访问控制 6.复用类 7.多态 8.接口与抽象类 9.内部类 10.容器 11.异...

飞鱼说编程
48分钟前
5
0
利用Lombok编写优雅的spring依赖注入代码,去掉繁人的@Autowired

大家平时使用spring依赖注入,都是怎么写的? @Servicepublic class OrderService { @Autowired private UserService userService;} 是不是很熟悉的感觉?但是呢 如果你用...

HeyS1
55分钟前
23
0
IBATIS 写BLOB字段遇到的问题

1、 首先遇到的配置问题,通过设置typeHandler 来支持写入。接下来由此引出了事务的问题。 <typeHandler jdbcType="BLOB" javaType="[B" callback="org.springframework.orm.ibatis.support....

echo-neo
今天
1
0
37. Sudoku Solver

Description tags: backtrack,hash table difficulty: hard Write a program to solve a Sudoku puzzle by filling the empty cells.A sudoku solution must satisfy all of the following......

52iSilence7
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部