参考:https://www.yiichina.com/doc/guide/2.0/concept-events

事件

  yii框架中的事件定义和JavaScript中的事件定义差不多:为某个事件绑定一些操作,如果这个事件被触发,那么绑定的操作就会被执行。

  这里有两个概念:事件与事件处理程序

  事件,泛指某个操作,比如孩子饿哭了。而事件处理程序就是对应的操作,比如大人去煮饭。

  如果一个类需要绑定、触发、取消事件,都需要yii\base\Component这个类的支持。

  

事件处理程序

  yii框架中的事件处理程序可以是一下四种:

  • 字符串形式指定的 PHP 全局函数,如 'trim' ;
  • 对象名和方法名数组形式指定的对象方法,如 [$object, $method] ;
  • 类名和方法名数组形式指定的静态类方法,如 [$class, $method] ;
  • 匿名函数,如 function ($event) { ... } 。

  

事件操作

  绑定事件

  yii框架中提供的绑定事件方法和jQuery中绑定事件的格式很相似: $obj->on(event,  event_handler)。

  其中,event是事件的名称,可以随意指定,需要注意的是,绑定事件的时候用的什么event名称,那么在解除事件或者触发事件的时候,也必须使用该名称才能出发该事件。

  触发事件

  在类中的方法内部使用$this->trigger(event),注意这个类必须继承yii\base\Component类。

  取消事件

  使用$obj->off(event, event_handler)来取消事件。

下面是一个完整的事件绑定、触发、取消的实例

<?php
namespace app\controllers; use yii\web\Controller;
use yii\base\Component;
use yii\base\Event; //要绑定事件或者触发事件的类要继承yii\base\Component
class Child extends Component {
public function Cry()
{
echo "孩子哭了,因为肚子饿<br>";
//当这个方法被调用的时候,触发事件。cry事件可以随意制定。
$this->trigger("cry");
}
} class Parents {
public function Cook()
{
echo "先别哭,老子马上做饭<br>";
} public static function Eat()
{
echo "吃饭吧<br>";
}
} class HelloController extends Controller {
public function actionOne()
{
$child1 = new Child();
$child2 = new Child();
$parents = new Parents(); //只为一个孩子绑定匿名函数作为事件处理程序
$child1->on("cry", function($e){
// print_r($e); //打印触发的事件信息
echo "闭嘴</br>";
}); //绑定其他事件处理程序(对象方法)
// $child1->on("cry", [$parents, "Cook"]);
//绑定其他事件处理程序(静态类方法)
// $child1->on("cry", ["app\controllers\Parents", "Eat"]);
//绑定其他事件处理程序(指定函数)
// $deal = function () {
// echo "shut up<br>";
// };
// $child1->on("cry", $deal);
// 取消事件
// $child1->off("cry", $deal); $child1->Cry(); //会触发cry事件,并且会调用事件处理程序
$child2->Cry(); //会触发cry事件,但是并不会调用事件处理程序
//输出:
//孩子哭了,因为肚子饿
//闭嘴
//孩子哭了,因为肚子饿
} public function actionTwo()
{
$child1 = new Child();
$child2 = new Child();
$parents = new Parents(); //为所有孩子绑定事件处理程序
//需要使用Event对象
Event::on(Child::className(), "cry", function($e){
// print_r($e);
echo "闭嘴<br>";
});
//使用这个方法同样可以绑定其他形式的事件处理程序格式。 //取消事件
// Event::off(Child::className(), "cry", "xxxx") $child1->Cry();
$child2->Cry();
//上面两个Cry方法中触发的cry事件,对应的事件都会被调用:
// 孩子哭了,因为肚子饿
// 闭嘴
// 孩子哭了,因为肚子饿
// 闭嘴
}
}

  

学习yii2.0——事件的更多相关文章

  1. PHP观察者模式与Yii2.0事件

    1.先看PHP观察者模式的实现: 想要使用事件.必须实现事件的基类.统一的addObserver和trigger方法 定义统一接口.所有的观察者都要实现此接口 //事件的基类 abstract cla ...

  2. 学习yii2.0——行为

    学习yii框架的行为之前,需要先了解yii的事件,可以参考这篇博客: 怎么理解行为 yii框架的行为有点类似于trait,可以有个大体的概念: 1.有一个类A,包含一些属性和方法,很普通的一个类A. ...

  3. 学习yii2.0——基础入门

    声明:本文内容来自于yiichina.com的权威指南. 安装 推荐使用composer来安全,可能有点慢(要下载的依赖比较多). composer create-project --prefer-d ...

  4. 学习 yii2.0——视图之间相互包含

    布局 首先创建一个布局文件simple.php,路径是在views/layout/目录下. <p>this is header</p> <?= $content ?> ...

  5. YII2.0--------这篇文章记录我学习YII2.0的过程吧,也可以让更多的人少走弯路

    1.情况:今天我从github上下载了一个项目,本以为直接丢到根目录运行就行了,但是不行. 解决办法:首先安装git,安装步骤这里不讲了,稍微讲一下配置环境变量.

  6. 学习yii2.0——依赖注入

    依赖注入 依赖注入是一种设计模式,可以搜索“php依赖注入”,这里不阐述了. yii框架的依赖注入 Yii 通过 yii\di\Container 类提供 DI 容器特性. 它支持如下几种类型的依赖注 ...

  7. yii2.0发送qq邮件详情配置

    首先要想使用qq发送邮件必须打开使用的qq邮箱里的一个配置,

  8. Yii2.0 高级版安装 windows

    最近在学习yii2.0 在安装高级版的时候遇到一些问题 索性解决了 下面分享一下 一.关于下载 自行百度,在Yii Framework 中文社区 下载专区下载高级应用程序模板(这边下载用电信网络不用下 ...

  9. Elasticsearch5.3 学习(一):安装、Yii2.0 下载es扩展

    Elasticsearch是一个基于Lucene,提供了一个分布式多用户能力的全文搜索引擎.其他就不多说了,官方文档有详细的介绍. 我自己是在CentOS 7.0安装的 Elasticsearch 是 ...

随机推荐

  1. docker:版本变更

    在2017年之前的版本号: v1.4,  v1.5,  v1.6,  v1.7, v1.8, v1.9, v1.10, v1.11, v1.12, v1.13 从2017年开始版本后变更为:${yy} ...

  2. Alpha阶段 - 博客链接合集

    Alpha阶段 - 博客链接合集 项目Github地址 安卓端(Stardust):https://github.com/StardustProject/Stardust 服务器端(Gravel):h ...

  3. 使用Razor Generator构建模块化ASP.NET MVC应用程序

    在构建Web应用程序的时候,我们很难做到模块化的开发,这是因为Web应用程序不仅仅包含编译的C#代码,还包含了js.css和aspx等资源. 在ASP.NET MVC中,我们发布应用程序的时候,还会包 ...

  4. 【消息队列】RabbitMQ+PHP实现

    本文链接:http://www.cnblogs.com/aiweixiao/p/7374249.html 文档提纲: 扫描关注微信公众号 1.[下载和安装] 1)gitHub下载地址: https:/ ...

  5. 寒假训练——搜索 K - Cycle

    A tournament is a directed graph without self-loops in which every pair of vertexes is connected by ...

  6. [MySQL性能优化系列] 聚合索引

    1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...

  7. Python 特殊函数解析(lambda 函数,map 函数,filter 函数,reduce 函数)

    写在之前 今天给大家介绍几个比较特殊的函数,他们具有函数式编程的特点,有人将它们视为 Python 可进行 「函数式编程」 的见证,至于什么是函数式编程,不是本篇文章的重点,感兴趣的可以去了解一下.老 ...

  8. vue组件详解——组件通信

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 组件之间通信可以用下图表示: 组件关系可分为父子组件通信.兄弟组件通信.跨级组件通信. ...

  9. <网络编程>基本TCP套接字编程

    tcp提供了可靠传输,当tcp向另一端发送数据的时候,要求对端返回一个确认.如果没有接收到确认,tcp就重传数据并且等待更长时间,数次重传失败后,tcp才放弃. 建立一个tcp连接会发生如下事情: 服 ...

  10. PAT A1094 The Largest Generation (25 分)——树的bfs遍历

    A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level bel ...