学习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 是 ...
随机推荐
- windows 解放鼠标快捷键
win+ 调整某个窗口的放大缩小靠边站,最小化 窗口间的切换alt+tablealt (按住)+table(一下)+ 上下左右 alt(一下)+table(一下)相邻切换 alt(按住)+tables ...
- spring cloud 实践之hystrix注意事项
当我们写类似下面代码时 package demo1.demo1; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org ...
- angular5 组件通信(一)
用了两年angular1,对1的组件通信比较熟练,最直接的就是直接使用scope的父子节点scope就可以实现,且基本都是基于作用域实现的通信:还有就是emit,broadcast,on这几个东西了. ...
- 简单的C#TCP协议收发数据示例
参考:http://www.cnblogs.com/jzxx/p/5630516.html 一.原作者的这段话很好,先引用一下: Socket的Send方法,并非大家想象中的从一个端口发送消息到另一个 ...
- 【angularJs】阻止默认事件
$scope.click = function($event){ $event.stopPropagation();//在函数体内加上这句代码就好} 作者:smile.轉角 QQ:493177502 ...
- day26 Python 改变对象的字符串显示
__str__,__repr__,__format__ format_dict={ 'nat':'{obj.name}-{obj.addr}-{obj.type}',#学校名-学校地址-学校类型 't ...
- node.js api文档生成
ApiDoc官网地址为:http://apidocjs.com/在Java中有Swagger及其升级版的Swagger2+Springfox自动生成接口管理文档.而在Node.js中则可以利用ApiD ...
- 一步一步写出java swing登录界面,以及输入的参数获取
经过好几天的学习,研究,接下来说说java swing,以及内嵌浏览器的方法. 一.swing是一个用于java应用程序用户界面的的开发工具包. 例如:接下来我们做个登录界面,简要说明 做之前的构想图 ...
- 环境部署(三):Linux下安装Git
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理,是目前使用范围最广的版本管理工具. 这篇博客,介绍下Linux下安装Git的步骤,仅供参考,当然,还是yum安装 ...
- python libnum库安装使用方法
libnum库是一个关于各种数学运算的函数库,它包含common maths.modular.modular squre roots.primes.factorization.ECC.converti ...