(1)定义事件监听的方式
1、全局定义
在app目录下的event.php文件中定义
如下,各参数说明
return [
'bind' => [ // 给事件定义类绑定别名
],
'listen' => [ // 定义监听事件tag和对应的监听类eventClass
'AppInit' => [],
'HttpRun' => [],
'HttpEnd' => [],
'LogLevel' => [],
'LogWrite' => [],
],
'subscribe' => [ // 事件订阅类定义
],
];
2、使用时定义
Event::listen($tag,$eventClass);
3、触发事件
Event::trigger($tag,$data);
4、事件订阅
可以通过事件订阅机制,在一个监听器中监听多个事件
示例如下:
定义一个订阅类 TestSub.php
然后在event.php文件中的 配置
'subscribe' => [ // 事件订阅类定义
'app\subscribe\TestSub'
],
<?php
declare (strict_types = 1);
namespace app\subscribe;
class TestSub
{
public function onTestSub1(){
echo("testSub1");
}
public function onTestSub2(){
echo("testSub2");
}
}
然后在控制器调用这两个事件
<?php
namespace app\controller;
use think\facade\Event;
use think\facade\Db;
class Index
{
public function index()
{
event('TestSub1');
event('TestSub2');
return 111;
}
}
此时访问该接口就可以看到这两个事件的结果了
注意:事件可以被主方法捕获异常
例如:事件中处理Db操作,如此事件被包含在事务中,事件的报错 会导致事务回滚,不会提交
文档更新时间: 2021-06-09 20:44 作者:admin