学习yii2.0——事件
参考: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——事件的更多相关文章
- PHP观察者模式与Yii2.0事件
1.先看PHP观察者模式的实现: 想要使用事件.必须实现事件的基类.统一的addObserver和trigger方法 定义统一接口.所有的观察者都要实现此接口 //事件的基类 abstract cla ...
- 学习yii2.0——行为
学习yii框架的行为之前,需要先了解yii的事件,可以参考这篇博客: 怎么理解行为 yii框架的行为有点类似于trait,可以有个大体的概念: 1.有一个类A,包含一些属性和方法,很普通的一个类A. ...
- 学习yii2.0——基础入门
声明:本文内容来自于yiichina.com的权威指南. 安装 推荐使用composer来安全,可能有点慢(要下载的依赖比较多). composer create-project --prefer-d ...
- 学习 yii2.0——视图之间相互包含
布局 首先创建一个布局文件simple.php,路径是在views/layout/目录下. <p>this is header</p> <?= $content ?> ...
- YII2.0--------这篇文章记录我学习YII2.0的过程吧,也可以让更多的人少走弯路
1.情况:今天我从github上下载了一个项目,本以为直接丢到根目录运行就行了,但是不行. 解决办法:首先安装git,安装步骤这里不讲了,稍微讲一下配置环境变量.
- 学习yii2.0——依赖注入
依赖注入 依赖注入是一种设计模式,可以搜索“php依赖注入”,这里不阐述了. yii框架的依赖注入 Yii 通过 yii\di\Container 类提供 DI 容器特性. 它支持如下几种类型的依赖注 ...
- yii2.0发送qq邮件详情配置
首先要想使用qq发送邮件必须打开使用的qq邮箱里的一个配置,
- Yii2.0 高级版安装 windows
最近在学习yii2.0 在安装高级版的时候遇到一些问题 索性解决了 下面分享一下 一.关于下载 自行百度,在Yii Framework 中文社区 下载专区下载高级应用程序模板(这边下载用电信网络不用下 ...
- Elasticsearch5.3 学习(一):安装、Yii2.0 下载es扩展
Elasticsearch是一个基于Lucene,提供了一个分布式多用户能力的全文搜索引擎.其他就不多说了,官方文档有详细的介绍. 我自己是在CentOS 7.0安装的 Elasticsearch 是 ...
随机推荐
- Linux常用命令-文本查看篇
前言 Linux常用命令中,除了cat还有很多其他用于文本查看的命令.本文将简单介绍一下这些文本查看的命令. 全文本显示--cat cat可能是常用的一个文本查看命令了,使用方法也很简单: cat f ...
- ab和jmeter进行GET/POST压力测试的使用心得和比较
引言: 互联网服务压测是非常重要的评价方法,ab,webbench,jmeter等都是业界流行的测试工具,ab和webbench作为shell模式下轻量级的测试工具,jmeter则作为有GUI界面的更 ...
- MySQL高级知识(十四)——行锁
前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识.行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高. 0.准备 #1.创建相关测试表tb_ ...
- python 代码检测工具
对于我这种习惯了 Java 这种编译型语言,在使用 Python 这种动态语言的时候,发现错误经常只能在执行的时候发现,总感觉有点不放心. 而且有一些错误由于隐藏的比较深,只有特定逻辑才会触发,往往导 ...
- Ubuntu开启或重启ssh服务
开启ssh服务首先需要安装打开ssh服务的库: sudo apt-get install openssh-server 检查当前的ssh开启情况: ps -e |grep ssh 如果有sshd,则s ...
- cocos2d-x 绘制图形
转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/25841727 绘制图形例如以下: 程序代码: 须要又一次定义父类虚函数draw() ...
- python抓取月光博客的全部文章而且依照标题分词存入mongodb中
猛击这里:python抓取月光博客的全部文章
- 匆忙记录 编译linux kernel zImage
arm的板子. 自己要定制下内核. 下载源码 cp 模板配置 .config make menuconfig 进行定制化 之后make zImage {注意 交叉编译 gcc 也要配置的} 之后 ./ ...
- python入门学习:3.操作列表
python入门学习:3.操作列表 关键点:列表 3.1 遍历整个列表3.2 创建数值列表3.3 使用列表3.4 元组 3.1 遍历整个列表 循环这种概念很重要,因为它是计算机自动完成重复工作的常 ...
- [CQOI2018]解锁屏幕
嘟嘟嘟 这题感觉真的很简单-- \(O(n ^ 2 logn)\)的做法特别好理解,但得开O2. 看数据范围,肯定是状压dp.但刚开始我没想通状压啥,因为点与点之间还有顺序问题.但后来发现这个顺序是子 ...