ThinkPHP6事件系统实战:构建松耦合业务架构的终极指南
一、架构优势
事件系统使业务耦合度降低80%,功能扩展效率提升300%
// 传统硬编码方式
$order->save();
$sms->send();
$log->write();
// 事件驱动方式
event('OrderCreated', $order);
二、核心机制
1. 事件定义与触发
// 定义事件类
namespace appevent;
class OrderCreated
{
public $order;
public function __construct($order) {
$this->order = $order;
}
}
// 触发事件
event(new OrderCreated($order));
2. 监听器注册
// 事件监听器
namespace applistener;
class SendOrderNotification
{
public function handle($event)
{
// 发送短信通知
SMS::send($event->order->mobile);
}
}
// 注册监听器
return [
'OrderCreated' => [
'SendOrderNotification',
'applistenerWriteOrderLog'
]
];
三、高级应用
1. 异步事件处理
// 配置异步队列
'event' => [
'async' => true,
'queue' => 'redis'
]
// 定义异步监听器
class ProcessOrderAsync
{
public $queue = true;
public function handle($event)
{
// 耗时操作
Report::generate($event->order);
}
}
2. 事件订阅系统
// 定义订阅者
namespace appsubscribe;
class UserSubscribe
{
public function onUserLogin($user)
{
// 记录登录日志
}
public function subscribe()
{
return [
'UserLogin' => 'onUserLogin'
];
}
}
// 注册订阅者
return [
'subscriber' => [
'appsubscribeUserSubscribe'
]
];
四、完整案例
电商订单系统
// OrderController.php
public function create()
{
$order = new Order(input());
if ($order->save()) {
event(new OrderCreated($order));
return success('订单创建成功');
}
}
// 事件监听器配置
return [
'OrderCreated' => [
'applistenerSendOrderNotification', // 发送通知
'applistenerUpdateInventory', // 库存更新
'applistenerGenerateInvoice', // 生成发票
'applistenerProcessCommission' // 计算佣金
],
'OrderPaid' => [
'applistenerShipOrder' // 订单发货
]
];
function runDemo() {
alert(‘在ThinkPHP6项目中创建event.php和listener目录即可实践’);
}