事件
模型事件
| 版本 | 新增功能 |
|---|---|
| 5.0.4 | 增加模型事件注冊快捷方法 |
模型(xing)事件是指(zhi)在進行模型(xing)的(de)寫入操作的(de)時候(hou)觸發的(de)操作行為(wei),包括模型(xing)的(de)save方法和delete方法。
模型事件只可(ke)以在(zai)調用(yong)模型的方法才能生(sheng)效(xiao),使用(yong)查詢構(gou)造器通過(guo)Db類(lei)操作是無效(xiao)的
模型類支持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 | 刪除后 |
使用(yong)方法如(ru)下:
User::event('before_insert', function ($user) {
if ($user->status != 1) {
return false;
}
});
注冊的回調方法支持傳入一個參數(當前的模型對象實例),并且before_write、before_insert、 before_update 、before_delete事(shi)件方(fang)法如(ru)果(guo)返回false,則不會繼續執行(xing)。
支持給(gei)一(yi)個位置注冊(ce)多個回調方法,例如:
User::event('before_insert', function ($user) {
if ($user->status != 1) {
return false;
}
});
// 注冊回(hui)調到(dao)beforeInsert函數
User::event('before_insert', 'beforeInsert');
可(ke)以(yi)在模型(xing)類的init方法里面(mian)統一注冊(ce)模型(xing)事件,例(li)如:
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;
}
});
}
}
調(diao)用(yong)當(dang)前模型(xing)也可(ke)以寫入(ru) self::event('before_insert', ...)
快捷注冊(V5.0.4+)
V5.0.4+版本(ben)開始,系統提供了(le)內置的(de)(de)事(shi)件(jian)注冊的(de)(de)快捷(jie)方法,你可(ke)以(yi)用下面的(de)(de)方式替代
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;
}
});
}
}
這些模型類的快捷方法(fa)如下(xia):
| 標簽位 | 描述 |
|---|---|
| beforeInsert | 新增前 |
| afterInsert | 新增后 |
| beforeUpdate | 更新前 |
| afterUpdate | 更新后 |
| beforeWrite | 寫入前 |
| afterWrite | 寫入后 |
| beforeDelete | 刪除前 |
| afterDelete | 刪除后 |
