mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-03-18 05:04:51 +08:00
105 lines
2.4 KiB
Markdown
105 lines
2.4 KiB
Markdown
# 事件跟踪器及调试
|
||
|
||
众所周知,炸毛框架中的事件由内置的事件分发器(EventDispatcher)负责分发,但调试事件分发在之前的版本比较困难,例如不能获取到事件如何被调用,以及事件如何被捕获。
|
||
|
||
EventTracer 的作用是记录事件的调用顺序,以便于调试。
|
||
|
||
命名空间使用指南:`use ZM\Event\EventTracer;`
|
||
|
||
## EventTracer::getCurrentEvent() - 获取当前注解事件对象
|
||
|
||
```php
|
||
/**
|
||
* @OnStart()
|
||
*/
|
||
public function onStart() {
|
||
zm_dump(EventTracer::getCurrentEvent());
|
||
}
|
||
/*
|
||
^ ZM\Annotation\Swoole\OnStart^ {#192
|
||
+worker_id: 0
|
||
+method: "onStart"
|
||
+class: "Module\Example\Hello"
|
||
}
|
||
*/
|
||
```
|
||
|
||
这里这个方法必须在注解事件内执行,如果在注解事件外执行,将会返回 `null`。
|
||
|
||
## EventTracer::getCurrentEventMiddlewares() - 获取当前注解事件的中间件们
|
||
|
||
```php
|
||
/**
|
||
* @OnStart()
|
||
* @Middleware("timer")
|
||
*/
|
||
public function onStart() {
|
||
zm_dump(EventTracer::getCurrentEventMiddlewares());
|
||
}
|
||
/*
|
||
^ array:1 [
|
||
0 => ZM\Annotation\Http\Middleware^ {#194
|
||
+middleware: "timer"
|
||
+params: []
|
||
+method: "onStart"
|
||
+class: "Module\Example\Hello"
|
||
}
|
||
]
|
||
*/
|
||
```
|
||
|
||
返回值为当前注解事件的中间件们,如果没有注解中间件,返回 `[]`。
|
||
|
||
## EventTracer::getEventTraceList() - 获取注解事件的列表
|
||
|
||
此处返回的是 `getCurrentEvent()` 相同的对象,但是返回的是一个数组,数组中的元素是注解事件。
|
||
|
||
```php
|
||
/**
|
||
* 一个简单随机数的功能demo
|
||
* 问法1:随机数 1 20
|
||
* 问法2:从1到20的随机数
|
||
* @CQCommand("随机数")
|
||
* @Middleware("timer")
|
||
* @CQCommand(pattern="*从*到*的随机数")
|
||
* @return string
|
||
*/
|
||
public function randNum() {
|
||
// 此处为随机数代码
|
||
zm_dump(EventTracer::getEventTraceList());
|
||
return "随机数:" . rand(1, 20);
|
||
}
|
||
|
||
/*
|
||
^ array:2 [
|
||
0 => ZM\Annotation\CQ\CQCommand^ {#193
|
||
+match: ""
|
||
+pattern: "*从*到*的随机数"
|
||
+regex: ""
|
||
+start_with: ""
|
||
+end_with: ""
|
||
+keyword: ""
|
||
+alias: []
|
||
+message_type: ""
|
||
+user_id: 0
|
||
+group_id: 0
|
||
+discuss_id: 0
|
||
+level: 20
|
||
+method: "randNum"
|
||
+class: "Module\Example\Hello"
|
||
}
|
||
1 => ZM\Annotation\Swoole\OnMessageEvent^ {#165
|
||
+connect_type: "default"
|
||
+rule: "connectIsQQ()"
|
||
+level: 99
|
||
+method: "handleByEvent"
|
||
+class: "ZM\Module\QQBot"
|
||
}
|
||
]
|
||
*/
|
||
```
|
||
|
||
## EventDispatcher::enableEventTrace() - 启用事件跟踪器
|
||
|
||
还没写完,不着急。
|