博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii2事件示例解析
阅读量:6266 次
发布时间:2019-06-22

本文共 1736 字,大约阅读时间需要 5 分钟。

事件可以将自定义代码“注入”到现有代码中的特定执行点。 附加自定义代码到某个事件,当这个事件被触发时,这些代码就会自动执行。

在处理复杂任务时,事件能很好地起到解耦的作用。事件相对于硬编码的方式来说也增加了服务器资源开销,所以比较建议在任务较为复杂时使用事件!

以下是实例代码,代码中有详细注释:

控制器

registerEventHandler(); } /** * 事件注册 */ private function registerEventHandler(){ //事件处理类 $msgHandler = new MsgHandler(); //绑定事件时,可以传入第三个参数。该参数值将会保存到Event类的data属性中 $this->on(self::BEFORE_SEND,[$msgHandler,'beforeSendMsg'],'who'); $this->on(self::AFTER_SEND,[$msgHandler,'afterSendMsg']); } /** * 测试用的方法 */ public function actionIndex(){ //发送信息前的事件类 $msgBefore = new MsgBeforeEvent(); $msgBefore->date = date('Y-m-d H:i:s',time()); //触发发送信息前的事件,传入事件类的实例对象,这里的对象充当了保存临时数据的角色 $this->trigger(self::BEFORE_SEND,$msgBefore); //假设这里是个较为复杂的任务 echo "发送信息...\n"; //任务执行完毕后,调用发送信息后的事件 $msgAfter = new MsgAfterEvent(); $msgAfter->from = 'Jack'; $msgAfter->to = 'Lucy'; $msgAfter->message = 'Awesome'; //触发发送信息后的事件 $this->trigger(self::AFTER_SEND,$msgAfter); }}

事件处理类

个人觉得可以直接放在models目录下,如果不需要用到数据库操作,可以考虑直接继承Model

date.',extraMsg:'.$event->data."\n"; //写入文件中 file_put_contents('log.txt',$logContent,FILE_APPEND); } /** * 处理发送信息后的事件 * @param MsgAfterEvent $event */ public function afterSendMsg(MsgAfterEvent $event){ /** * 从event中读取数据 */ $logContent = "AFTER!".$event->from.'发送给'.$event->to.',内容如下:'.$event->message."\n"; file_put_contents('log.txt',$logContent,FILE_APPEND); }}

消息发送前的事件类

可以放到models目录下

消息发送后的事件类

可以放到models目录下

处理结果

运行控制器中的index方法后,在log.txt文件中得到如下结果

BEFORE:2017-11-08 14:10:07,extraMsg:whoAFTER!Jack发送给Lucy,内容如下:Awesome

转载地址:http://mucpa.baihongyu.com/

你可能感兴趣的文章
php多进程pcntl学习(采集新浪微博)
查看>>
[转]ListView学习笔记(一)——缓存机制
查看>>
【完全跨域】异步上传文件并获得返回值
查看>>
【TCP/IP详解 卷一:协议】第二章:链路层
查看>>
AWS开发人员认证考试样题解析
查看>>
Linux_DHCP服务搭建
查看>>
日请求亿级的 QQ 会员 AMS 平台 PHP7 升级实践
查看>>
【Coursera】Security Introduction -Eighth Week(2)
查看>>
Vue系列:如何将百度地图包装成Vue的组件
查看>>
Charles 从入门到精通
查看>>
MVC5 + EF6 简单示例
查看>>
Mysql Innodb存储引擎 insert 死锁分析
查看>>
好的用户界面-界面设计的一些技巧
查看>>
全端开发必备!10个最好的 Node.js MVC 框架
查看>>
初始Knockout
查看>>
HADOOP 2.6 INSTALLING ON UBUNTU 14.04 (hadoop 2.6 部署到ubuntu 14.04上面)
查看>>
OSSIM架构与组成综述
查看>>
用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目
查看>>
数据分析:基于Python的自定义文件格式转换系统
查看>>
如何重置Sitecore CMS中的管理员密码
查看>>