事件
最后更新于:2022-04-01 21:22:46
## 模型事件
|版本|新增功能|
|---|---|
|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 | 删除后 |
';