事件

模型事件

版本 新增功能
5.0.4 增加模型事件注冊(cè)快捷方法

模型事件是指在進(jìn)行模型的寫入操作的時(shí)候觸發(fā)的操作行為,包括模型的save方法和delete方法。

模型事件只可以在調(diào)用模型的方法才能生效,使用查詢構(gòu)造器通過Db類操作是無效的

模型類支持before_delete、after_deletebefore_write、after_write、before_updateafter_update、before_insertafter_insert事件行為

標(biāo)簽位 描述
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;
            }
        });

注冊(cè)的回調(diào)方法支持傳入一個(gè)參數(shù)(當(dāng)前的模型對(duì)象實(shí)例),并且before_writebefore_insert、 before_update 、before_delete事件方法如果返回false,則不會(huì)繼續(xù)執(zhí)行。

支持給一個(gè)位置注冊(cè)多個(gè)回調(diào)方法,例如:

        User::event('before_insert', function ($user) {
            if ($user->status != 1) {
                return false;
            }
        });
        // 注冊(cè)回調(diào)到beforeInsert函數(shù)
        User::event('before_insert', 'beforeInsert');

可以在模型類的init方法里面統(tǒng)一注冊(cè)模型事件,例如:

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;
            }
        });
    }
}

調(diào)用當(dāng)前模型也可以寫入 self::event('before_insert', ...)

快捷注冊(cè)(V5.0.4+

V5.0.4+版本開始,系統(tǒng)提供了內(nèi)置的事件注冊(cè)的快捷方法,你可以用下面的方式替代

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;
            }
        });
    }
}

這些模型類的快捷方法如下:

標(biāo)簽位 描述
beforeInsert 新增前
afterInsert 新增后
beforeUpdate 更新前
afterUpdate 更新后
beforeWrite 寫入前
afterWrite 寫入后
beforeDelete 刪除前
afterDelete 刪除后

文檔最后更新時(shí)間:2018-04-26 10:09:15

文檔
目錄

深色
模式

切換
寬度