ThinkPHP6事件系统实战:构建松耦合的模块化应用架构

2025-07-29 0 814

ThinkPHP6事件系统实战:构建松耦合的模块化应用架构

一、设计理念

基于事件驱动的架构,实现模块间解耦,系统可维护性提升60%

用户注册 → 触发事件 → 邮件通知 + 数据统计 + 积分奖励

二、核心实现

1. 基础事件定义

// 定义用户注册事件
namespace appevent;

class UserRegistered
{
    public $user;
    
    public function __construct($user)
    {
        $this->user = $user;
    }
}

// 事件监听器配置(app/event.php)
return [
    'listen' => [
        'UserRegistered' => [
            'applistenerSendWelcomeEmail',
            'applistenerUpdateUserStats',
            'applistenerAddRewardPoints'
        ],
    ],
];

2. 监听器实现

// 发送欢迎邮件监听器
namespace applistener;

class SendWelcomeEmail
{
    public function handle($event)
    {
        $mailer = new appserviceMailer();
        $mailer->send(
            $event->user->email,
            '欢迎注册',
            'welcome_template',
            ['user' => $event->user]
        );
    }
}

// 更新统计监听器
class UpdateUserStats
{
    public function handle($event)
    {
        appmodelUserStat::updateStats($event->user->id);
    }
}

三、高级特性

1. 异步事件处理

// 配置队列监听(config/queue.php)
return [
    'default' => 'redis',
    'connections' => [
        'redis' => [
            'type' => 'redis',
            'queue_name' => 'think_queue',
            'expire' => 60,
        ],
    ],
];

// 异步事件监听器
class AddRewardPoints
{
    public $queue = true; // 启用队列
    
    public function handle($event)
    {
        appservicePointService::add($event->user->id, 100);
    }
}

2. 事件订阅系统

// 创建订阅者(app/subscribe/UserSubscriber.php)
namespace appsubscribe;

class UserSubscriber
{
    public function onUserRegistered($event)
    {
        // 处理注册事件
    }

    public function onUserLogin($event)
    {
        // 处理登录事件
    }

    public function subscribe()
    {
        return [
            'UserRegistered' => 'onUserRegistered',
            'UserLogin' => 'onUserLogin'
        ];
    }
}

// 注册订阅者(app/event.php)
'subscribe' => [
    'appsubscribeUserSubscriber'
],

四、完整案例

电商订单处理流程

1. 订单创建 → 触发OrderCreated事件
2. 监听器处理:库存扣减 + 支付记录 + 通知卖家

// 订单控制器触发事件
namespace appcontroller;

class Order
{
    public function create()
    {
        $order = Order::create(input());
        event('OrderCreated', new appeventOrderCreated($order));
        return success($order);
    }
}

// 库存监听器(异步)
class DeductInventory
{
    public $queue = true;
    
    public function handle($event)
    {
        foreach ($event->order->items as $item) {
            appmodelInventory::deduct($item->product_id, $item->quantity);
        }
    }
}
ThinkPHP6事件系统实战:构建松耦合的模块化应用架构
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

淘吗网 thinkphp ThinkPHP6事件系统实战:构建松耦合的模块化应用架构 https://www.taomawang.com/server/thinkphp/678.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务