ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 事件 ## 模型事件 版本新增功能5.0.4增加模型事件注册快捷方法模型事件是指在进行模型的写入操作的时候触发的操作行为,包括模型的save方法和delete方法。 > 模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的 模型类支持`before_delete`、`after_delete`、`before_write`、`after_write`、`before_update`、`after_update`、`before_insert`、`after_insert`事件行为 标签位描述before\_insert新增前after\_insert新增后before\_update更新前after\_update更新后before\_write写入前after\_write写入后before\_delete删除前after\_delete删除后使用方法如下: ``` User::event('before_insert', function ($user) { if ($user->status != 1) { return false; } }); ``` 注册的回调方法支持传入一个参数(当前的模型对象实例),并且`before_write`、`before_insert`、 `before_update` 、`before_delete`事件方法如果返回false,则不会继续执行。 支持给一个位置注册多个回调方法,例如: ``` User::event('before_insert', function ($user) { if ($user->status != 1) { return false; } }); // 注册回调到beforeInsert函数 User::event('before_insert', 'beforeInsert'); ``` 可以在模型类的init方法里面统一注册模型事件,例如: ``` namespace app\index\model; use think\Model; class User extends Model { protected static function init() { User::event('before_insert', function ($user) { if ($user->status != 1) { return false; } }); } } ``` > 调用当前模型也可以写入 self::event('before\_insert', ...) ## 快捷注册(`V5.0.4+`) V5.0.4+版本开始,系统提供了内置的事件注册的快捷方法,你可以用下面的方式替代 ``` namespace app\index\model; use think\Model; class User extends Model { protected static function init() { User::beforeInsert(function ($user) { if ($user->status != 1) { return false; } }); } } ``` 这些模型类的快捷方法如下: 标签位描述beforeInsert新增前afterInsert新增后beforeUpdate更新前afterUpdate更新后beforeWrite写入前afterWrite写入后beforeDelete删除前afterDelete删除后