YII2框架学习 扩展篇(二) 事件机制
来源:互联网 发布:不义联盟网络对战模式 编辑:程序博客网 时间:2024/06/07 04:01
今天学习YII框架的事件机制,某个对象可以抛出一些事件,而其他的对象可以监听这些事件,然后调用相应的方法。而具体的实现方式可以分为扫描式和绑定式。而YII框架使用的就是绑定式。下面来详细讲解一下。
所谓绑定式,是由事件执行时,通过Component类下的trigger()方法抛出事件,然后通过on()方法来绑定其他对象对此事件的反应。下面通过一个简单的猫叫老鼠跑的例子来说明。这个一个一对一的事件机制。
1.一个一对一的事件机制
cat.php
namespace vendor\animal;use \yii\base\Component;class MyEvent extends Event{ public $message;}class Cat extends Component{ public function shout(){ echo 'cat miao<br>'; $this->trigger('miao',$me); }}mouse.php
namespace vendor\animal;class Mouse{ public function run(){ echo 'mouse running<br>';//老鼠跑事件 }}控制器
namespace app\controllers;use yii\web\Controller;use vendor\animal\Cat;use vendor\animal\Mouse;use vendor\animal\Dog;use \yii\base\Event;class HelloController extends Controller{ public function actionAbout(){ $cat = new Cat; $mouse = new Mouse; $cat->on('miao',[$mouse,'run']);//为miao事件绑定老鼠跑事件 $cat->shout(); }}输出为
miao
mouse running
2.带参数的事件
有的时候,事件需要参数才能让其他对象反应的,比如报警119,需要告知着火地点。可以通过trigger来写入事件信息。
cat.php
namespace vendor\animal;use \yii\base\Component;use \yii\base\Event;class MyEvent extends Event{ public $message;}class Cat extends Component{ public function shout(){ echo 'cat miao<br>';//猫叫事件 $me = new MyEvent; $me->message = 'hello<br>';//事件参数 $this->trigger('miao',$me);//抛出名为miao的事件,附上参数$me对象 }}mouse.php
namespace vendor\animal;class Mouse{ public function run($me){ echo $me->message; echo 'mouse running<br>';//老鼠跑事件 }}
输出
miao
hello
mouse running
3.触发多个事件
可以加上dog.php
namespace vendor\animal;class Dog{ public function run($me){ echo $me->message; echo 'dog catch<br>'; }}
控制器加上
$cat->on('miao',[$dog,'run']);
要想接触绑定
$cat->off('miao',[$dog,'run']);
输出
miao
hello
mouse running
hellodog catch
4.类触发事件
有的时候,不只是某只实例化的猫,只要是只猫叫就想让老鼠跑的话,可以这么写on
Event::on(Cat::className(),'miao',[$mouse,'run']);
阅读全文
0 0
- YII2框架学习 扩展篇(二) 事件机制
- YII2框架学习 基础篇(二) YII2数据库操作
- YII2框架学习 扩展篇(一) 模块化设计
- YII2框架学习 扩展篇(三) Mixin技术
- YII2框架学习 扩展篇(四) 依赖注入
- YII2框架学习 高效篇(二) 数据缓存
- YII2框架学习 基础篇(一)
- YII2下使用百度编辑器扩展yii2-ueditor(二)
- yii2框架(二):控制器和视图
- yii2框架-yii2的事件(五)
- YII2框架学习 高效篇(一) 延迟加载
- YII2框架学习 高效篇(四) http缓存
- YII2框架学习 高效篇(五) Gii工具
- 【转】yii2的事件机制
- YII2框架学习 安全篇(二) XSS攻击和防范(下)
- Yii2框架基础篇学习-控制器
- yii2学习笔记(二)Composer安装
- Android学习笔记之事件分发机制(二)
- javabean总结
- 论文《NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE》总结
- Android之捕获TextView超链接
- linux学习笔记之网络环境查看命令及测试命令
- switch语句与for循环
- YII2框架学习 扩展篇(二) 事件机制
- 面试(动态规划算法之:最长公共子序列 & 最长公共子串(LCS))
- Dataset 列表:机器学习研究
- Flask-admin 学习及一些笔记
- 接sdk时遇到的一些问题:
- Java邮件客户端发送邮件+附件
- HBase架构与原理
- JavaWeb学习总结(七)——HttpServletResponse对象(一)
- 一次CPU占用过高事件的胡乱解决