Yii2事件驱动的运行机制
最近一段时间正在作个一个项目,这个项目会系统逻辑比较复杂,使用PHP Yii2,使用事件驱动机制进行研发,下面就最近研究事件驱动机制的使用作以下总结:
流程如下:
1.要创建含有事件注入的类,一般这样的类都是组件类,即间接或直接的继承自 yii\base\Componet类
2. 要在该类中定义触发是事件名, 一般使用常量来定义,(这样作的好处是再注册事件时,事件名在IDE中可自动完成输入,不容易出错)
eg.
class foo
{
const EVENT_HELLO = 'event_hello';
public function bar()
{
$this->trigger(self::EVENT_HELLO);
}
}
3.注册事件,用on方法(只要继承自component 都有这个方法)
eg. 注册foo类的个一实例事件:
{
$foo = new Foo();
$foo->on(Foo::EVENT_HELLO,事件处理器,'传入数据',$append = true)
/**
其中第一个参数是指事件名,
第二个参数是事件处理器,事件处理器可以是如下几种形式:
$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) { //事件处理逻辑 });
第三个参数是传个事件处理函数的的数据,
第四参数是附加事件顺序,默认是先绑定的先执行,如果最后一个参数值为false,则后来附加的事件会被先执行
*/
$foo->bar() 执行这个方法时会触发 event_hello 事件, 就会执行app\components\Bar,里的静态方法meothodName
}
4.事件处理器,这里以一个类的静态方法为例:
use yii\base\Event;
class handleEvent
{
public static function sendmsg(Event $event) //执行该处理事件时,会将事件句柄$event 传进来
{
var_dump($event->name;)名件名
var_dump($event->sender);事件发送者,即是哪个对象或类上面附加的事件被触发了,
var_dump($event->data)// 即on 方法的第个参数
var_dump($event->handled) 默认值为flase, 如查在某个事件处理器把该数值设为true, 那么他后面附加的事件处理器将不会被执行
}
}
该传入的事件句柄$event 默为yii\base\Event 对象,如果想传入其他一些额外数据,则可以在事件触发方法中传入第二个参数,
$this->trigger(self::EVENT_HELLO,$event);
该$event必须是yii\base\Event是的字类对象,代码如下:
namespace app\components;
use yii\base\Component;
use yii\base\Event; class MessageEvent extends Event
{
public $message;
}
class Mailer extends Component
{
const EVENT_MESSAGE_SENT = 'messageSent'; public function send($message)
{ // ...发送 $message 的逻辑...
$event = new MessageEvent;
$event->message = $message;
$this->trigger(self::EVENT_MESSAGE_SENT,$event);
}
}
该messageEvent 可以单独放在另一个类文件中,这时传入到事件处理器中$event 即为MessageEvent类对象,且拥有了额外数据$event->message
到此,该流程完成
Yii2事件驱动的运行机制的更多相关文章
- Windows程序内部运行机制 转自http://www.cnblogs.com/zhili/p/WinMain.html
一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...
- PULL解析XML的运行机制详解
PULL解析简单易上手,基本上看一遍,基本上就会解析啦,但总是感觉对PULL解析的运行机制不是很了解,就总结了以下事件驱动到底是怎么执行的.. PULL: Android内置了PULL解析器.PULL ...
- 深入浅出话VC++(1)——Windows程序内部运行机制
一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...
- Node.js和PHP运行机制对比
为什么要用node.js它又有什么优势呢?一个新的技术被大家喜爱那么它就必然有它的优势,那么下面我们就来简单把它和php做一个对比 1 . Node.js 他用的是JavaScript引擎,那么注定它 ...
- DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能
DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能 一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己 ...
- 如何通过setTimeout理解JS运行机制详解
setTimeout()函数:用来指定某个函数或某段代码在多少毫秒之后执行.它返回一个整数,表示定时器timer的编号,可以用来取消该定时器. 例子 ? 1 2 3 4 5 console.log(1 ...
- [转载]JavaScript 运行机制详解:再谈Event Loop
https://app.yinxiang.com/shard/s8/sh/b72fe246-a89d-434b-85f0-a36420849b84/59bad790bdcf6b0a66b8b93d5e ...
- 【朴灵评注】JavaScript 运行机制详解:再谈Event Loop
PS: 我先旁观下大师们的讨论,得多看书了~ 别人说的:“看了一下不觉得评注对到哪里去,只有吹毛求疵之感. 比如同步异步介绍,本来就无大错:比如node图里面的OS operation,推敲一下就 ...
- windows程序内部运行机制
Windows程序内部运行机制 2007-10-21 19:52 1010人阅读 评论(0) 收藏 举报 windowsvc++applicationcallbackwinapistructure W ...
随机推荐
- CMS GC启动参数优化配置
简介: java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现 ...
- 【做题】agc016d - XOR Replace——序列置换&环
原文链接 https://www.cnblogs.com/cly-none/p/9813163.html 题意:给出初始序列\(a\)和目标序列\(b\),都有\(n\)个元素.每次操作可以把\(a\ ...
- 【笔记】Cocos2dx学习笔记
自建场景类 自建场景类BaseScene继承与Scene类,在init函数中添加了默认的,键盘与鼠标事件的响应,添加了一个用于读取XML文件的字典,添加了一个结束场景的方法. 类的声明代码如下: #i ...
- 【团队】EasyKing的实现_2
下载开发版 完成情况 完成了碰撞箱的制作 TODO 子弹攻击范围 音效 英雄技能 建筑 双人联机 物品 小兵 地图移动
- Qt Windows打开指定文件注意替换双斜杠为单斜杠
QProcess::startDetached(QString("explorer %1").arg(strFilePath)); 其中,在windows上使用时,strFileP ...
- 使用C#加密及解密字符串
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Util ...
- RNN流程
1.记号 2.前向计算,第二张图是第一张图的公式的简化.其中a称之为隐状态 3.计算代价函数
- linux文件管理之链接文件
文件链接 ====================================================================================软链接 或 符号链接硬 ...
- 版本控制——Version Control
版本控制是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一. 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什么人更改了文件的什么内容等信息忠实 ...
- redis pipline 和 事务
1. Pipeline:“管道”,和很多设计模式中的“管道”具有同样的概念,pipleline的操作,将明确client与server端的交互,都是“单向的”:你可以将多个command,依次发给se ...