ThinkPHP6事件系统实战:构建松耦合的业务处理架构
ThinkPHP6的事件系统基于观察者模式实现,能够有效解耦业务逻辑。本文将通过用户注册场景,展示如何利用事件系统实现异步邮件发送、数据统计等附属功能。
1. 事件定义与监听器注册
首先在event.php中定义用户注册事件:
return [
‘listen’ => [
‘UserRegistered’ => [
applistenerSendWelcomeEmail::class,
applistenerUpdateUserStats::class
],
],
];
2. 创建事件类
定义具体的用户注册事件类:
namespace appevent;
class UserRegistered
{
public $user;
public function __construct($user)
{
$this->user = $user;
}
}
3. 实现监听器逻辑
创建发送欢迎邮件的监听器:
namespace applistener;
class SendWelcomeEmail
{
public function handle($event)
{
$user = $event->user;
$content = “尊敬的{$user->name},欢迎加入我们!”;
// 实际发送邮件逻辑
mail($user->email, ‘欢迎注册’, $content);
}
}
4. 业务代码触发事件
在用户注册成功后触发事件:
public function register()
{
$user = UserModel::create(input(‘post.’));
// 触发用户注册事件
event(‘UserRegistered’, $user);
return json([‘code’ => 200, ‘msg’ => ‘注册成功’]);
}
5. 异步事件处理
对于耗时操作,可以使用队列异步处理:
‘UserRegistered’ => [
[applistenerSendWelcomeEmail::class, ‘queue’]
],
// 监听器需实现ShouldQueue接口
class SendWelcomeEmail implements ShouldQueue
{
public $queue = ’emails’;
public function handle($event) { … }
}
通过事件系统,ThinkPHP6应用可以实现高度解耦的架构设计,提升代码可维护性和扩展性。