模型事件
模型事件
版本 | 新增功能 |
---|---|
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 | 删除后 |