ThinkPHP6 - Events
原创
©著作权归作者所有:来自51CTO博客作者Jurlins的原创作品,请联系作者获取转载授权,否则将追究法律责任
内置应用事件
AppInit | 应用初始化标签位 | 无 |
HttpRun | 应用开始标签位 | 无 |
HttpEnd | 应用结束标签位 | 当前响应对象实例 |
LogWrite | 日志write方法标签位 | 当前写入的日志信息 |
RouteLoaded | 路由加载完成 | 无 |
LogRecord | 日志记录V6.0.8+ | 无 |
内置模型事件
after_read | 查询后
|
before_insert
| 新增前
|
after_insert
| 新增后
|
before_update
| 更新前
|
after_update
| 更新后
|
before_write
| 写入前
|
after_write
| 写入后
|
before_delete
| 删除前
|
after_delete
| 删除后
|
事件创建
使用命令行
php think make:event MyEvent
会自动创建一个事件文件:/app/event/MyEvent.php
<?php
declare (strict_types = 1); //开启类型严格检查
namespace app\event;
class MyEvent{
//手动加上一个 handler 方法,事件调用时,用来处理事件逻辑
public function handle($user){
}
}
事件注册(绑定)
在 /app/event.php 中注册我们编写的事件,加入我们的事件:
return [
'bind' => [
//...
'MyEvent' => 'app\event\MyEvent'
],
];
也可以使用动态注册
Event::bind(['MyEvent' => 'app\event\MyEvent']);
事件调用
两种方式:门面、函数助手
Event::trigger('UserLogin');
事件监听
使用命令行创建监听器:
php think make:listener MyListener
会自动生成一个监听器文件:
<?php
declare (strict_types = 1);
namespace app\listener;
class MyListener{
/**
* 事件监听处理,不同于事件,该方法命令行已经为我们准备好了,我们需要实现里面的逻辑。
*
* @return mixed
*/
public function handle($event){
//监听的事件发生时,执行一些操作...
}
}
指定事件监听后的处理:
//使用监听器处理
Event::listen('MyEvent', 'app\listener\MyListener');
//如果逻辑简单,可以直接使用闭包处理,如果返回 false,则不再向后面的监听器传递
Event::listen('MyEvent', function($user) {
//do something
});
//使用通配符监听多个事件
Event::listen('model.*', 'app\listener\ModelListen');
事件订阅
除了监听器,也可以用订阅器来处理事件,它可以轻松的处理多个事件
创建订阅者
php think make:subscribe MySubscribe
自动生成一个简单的订阅者文件,需要我们手动实现 subscribe 方法处理事件订阅
<?php
declare (strict_types = 1);
namespace app\subscribe;
class MySubscribe{
public function handleEvent1(){}
public function handleEvent2(){}
public function subscribe(Event $event){
$event->listen('Event1', [$this,'handleEvent1']);
$event->listen('Event2', [$this,'handleEvent2']);
}
}
注册订阅者:
在 /app/event.php 文件的 subscribe 属性数组中,加入我们的订阅者
'subscribe' => [
//...
'app\subscribe\MySubscribe',
],
或者用动态注册
Event::subscribe('app\subscribe\User');