[事件] -- yii2事件使用
来源:互联网 发布:人工智能下肢辅助支架 编辑:程序博客网 时间:2024/04/30 20:41
yii2事件 : 可以在特定的时间点,触发执行预先设定的一段代码,事件既是代码解耦的一种方式,也是设计业务流程的一种模式。现代软件中,事件无处不在,比如,你发了个微博,触发了一个事件,导致关注你的人,看到了你新发出来的内容。
在Yii2中可以很好的支持事件,在执行一个操作后,可以触发一个事件,实现不同的功能。
比如,发布一条微博,微博发送成功后,接下来要通知关注你的人你发布一条微博,在接下来也要通知你微博中@的人,这就是两个相当独立的功能,我们就可以定义好这些独立的事件,在发布成功后,按顺序触发这些事件,一方面可以解耦代码复杂的关系,另一方面利于维护。
在Yii2中,事件的绑定要通过yii\base\Component或者其子类来完成. 注意: yii\base\Object 不支持事件.所以,当你需要使用事件时,请从 yii\base\Component 进行继承。同时,Yii中还有一个与事件紧密相关的 yii\base\Event ,他封装了与事件相关的有关数据,并提供一些功能函数作为辅助。
on绑定事件共有3个参数
on:绑定事件所有格式 //foo类是继承于yii\base\Component或者其子类 $foo = new foo(); // 处理器是全局函数 $foo->on(Foo::EVENT_HELLO, 'function_name'); // 处理器是对象方法 $foo->on(Foo::EVENT_HELLO, [$object, 'methodName']); // 处理器是静态类方法 $foo->on(Foo::EVENT_HELLO, ['app\components\Bar', 'methodName']); // 处理器是匿名函数 $foo->on(Foo::EVENT_HELLO, function ($event) { //事件处理逻辑 });第一个参数,其实就是所谓定义事件的语义名称(第一个参数就是绑定的事件名称, 也就是trigger时候的名称 如$this->trigger(Foo::EVENT_HELLO)),第二个参数才是处理主体,即事件hander,其实还可以存在第三个参数,即绑定事件时,要传递给处理事件hander处理的数据。
$foo->on(Foo::EVENT_HELLO, [$object, 'methodName'],'test');
在事件hander(参数二)里可以通过$event->data获取到这个传递的参数值:
//事件处理的类(model类)
class Msg extends ActiveRecord { // 触发 public function publish($event) { print_r($event->data);//输出传递过来的‘我已发新微博’ //做逻辑处理 } public function request($event) { print_r($event->data);//输出传递过来的‘我已@您’ //做逻辑处理 } }控制器类
class UserController extends Controller { const EVENT_PUB = 'pub'; //通知关注自己发送新微博的事件 const EVENT_REQU = 'requ';//通知@的人 public function actionsend() { /... //发送微博信息的逻辑 /... //发送成功后,开始绑定触发的通知关注自己的所有人(自己发了新微博) //按顺序将事件绑定在一个数组中 $Msg = new Msg(); $this->on(self::EVENT_PUB,[$Msg,'publish'],'我已发新微博'); $this->on(self::EVENT_REQU,[$Msg,'request'],'我已@您'); //触发 $this->trigger(self::EVENT_PUB); $this->trigger(self::EVENT_REQU); } }
* 以上是on绑定时候传参,下面是trigger时候传参
定义一个event类(model类):
<?php namespace app\models; use yii\base\Event; class MsgEvent extends Event{ //下面的这三个参数需要在触发事件时传递 public $dateTime; // 微博发出的时间 public $author; // 微博的作者 public $content; // 微博的内容 }因为trigger()函数的第二个参数就是一个对象也就是$event,所以可以在event类中定义属性,实例化对象后,将$event传递过去,其实就是把需要的参数传递过去。
那么在控制器中(Controller):
public function actionTest() { $Msg = new Msg(); //赋值参数 $MsgEvent = new MsgEvent(); $MsgEvent->dateTime = time(); $MsgEvent->author = 'bingcool'; $MsgEvent->content = 'hello,everyone'; $this->on(self::EVENT_PUB,[$Msg,'publish'],'我已发新微博'); //第二个参数设为$MsgEvent; $this->trigger(self::EVENT_HELLO,$MsgEvent); }那么在事件处理的类(model类):
分别显示on绑定时候的数据和trigger时候的数据
class Msg extends ActiveRecord { // 触发 public function publish($event) { //$event->data是on绑定时候的参数 print_r($event->data);//输出传递过来的‘我已发新微博’ //触发传参数 print_r($event->anthor);//输出'bingcool' print_r($event->content);//输出'hello,everyone' //做逻辑处理 } public function request($event) { print_r($event->data);//输出传递过来的‘我已@您’ //做逻辑处理 } }
0 0
- [事件] -- yii2事件使用
- yii2-事件
- YII2依赖注入和事件的使用
- yii2.0 事件
- Yii2 使用Event -2 ,如何使用事件_@TERRY
- Yii2 使用Event -1 ,如何使用事件_@TERRY
- yii2框架-yii2的事件(五)
- Yii2使用beforeLogout事件更新用户登录信息
- Yii2.0-advanced-9—使用事件发送邮件
- 【转】yii2的事件机制
- Yii2事件与行为总结
- Yii2 自带事件的用法
- YII2框架的静态事件绑定
- 事件使用情况-侦听事件,订阅事件
- 事件
- 事件
- 事件
- 事件
- Netty学习之旅----ByteBuf源码解读之初探UnpooledHeapByteBuf、UnpooledDirectByteBuf
- PhpStorm中文帮助手册
- [LeetCode]149. Max Points on a Line
- RabbitMQ build for windows
- F - Decoding
- [事件] -- yii2事件使用
- Mysql数据库主从配置
- SpringMvc Maven基本配置
- Head First java 猜数字游戏
- ruby语法课3
- sql语句-linq语言-lambda表达式对照 (赞)
- Android FTPUtils工具在通知栏notification显示进度
- 每天一个linux命令(28):gzip命令
- JS调试必备的5个debug技巧