thinkphp 6.0 中通过观察者模式解耦用户注册后的日志记录等业务逻辑:新建 userobserver 类监听 created 事件,于 user 模型中调用 observe() 绑定,调用 create() 即自动触发。

在 ThinkPHP 6.0 中为用户注册后自动发送欢迎邮件、记录操作日志、同步更新缓存,又不想让 User 模型承担全部逻辑导致职责混乱,必须把业务动作从模型中剥离出来——观察者(Observer)正是为此而设的解耦机制。
注册观察者类
在 appobserve 目录下新建 UserObserver.php 文件,内容如下:
这一步不能放在控制器或模型里直接 new,否则无法被框架自动触发;必须确保类路径与命名空间严格匹配。
```php
namespace appobserve;
use appmodelUser;
use thinkModel;
class UserObserver
{
public function created(User $user)
{
// 用户创建完成后的钩子
hinkacadeLog::info('新用户注册', ['id' => $user->id, 'email' => $user->email]);
}
}
```
绑定观察者到模型
打开 appmodelUser.php,在类定义末尾添加 observe 方法调用:
注意:observe() 必须写在模型类内部,且只能调用一次;重复调用会覆盖前一个观察者。
```php
namespace appmodel;
use thinkModel;
class User extends Model
{
protected $name = 'user';
protected static function init()
{
self::observe('app\observe\UserObserver');
}
}
```
触发观察者动作
只要通过模型的 create() 或 save() 创建新记录,观察者就会自动响应:
```php
User::create(['username' => 'alice', 'email' => 'alice@example.com']);
```
【created 方法仅对 insert 操作生效,update 或 delete 不触发】
这一步操作起来很简单,直接调用 create 即可,无需手动调用 observe 或 notify。











