鍍金池/ 問答/PHP/ TP5.0 before_insert等模型事件無效?

TP5.0 before_insert等模型事件無效?

按照ThinkPHP5.0官方手冊提示:

User::event('before_insert', function ($user) {
    if ($user->status != 1) {
       return false;
    }
});

圖片描述

手冊鏈接:https://www.kancloud.cn/manua...

我嘗試使用TP模型自帶的 beforeInsert 方法,做插入前的系列操作,但是沒有任何效果,請問各位有成功使用過嘛,或者能給點解決思路或方案.

下面是我的代碼

/+------------------------------------
/ 模型User中
/+------------------------------------
// 初始化
protected static function init()
{

    // 方式1
    User::event('before_insert', function ($user) {
        die('check');
    });

    // 方式2
    User::event('before_insert', 'beforeInsert');
    User::event('after_insert', 'afterInsert');

}

// 插入
public function charu($data)
{
    return $this->insert($data);
}

// 插入前
protected static function beforeInsert($callback, $override = false)
{
    echo 'start';exit();
}

/+------------------------------------
/ 控制器中
/+------------------------------------
$res = (new User())->charu($data);

echo "<pre>";
var_dump($res);exit();

執(zhí)行結(jié)果如下

圖片描述

直接插入成功了,沒有受到前置動作的影響,請問這是為什么呢?

回答
編輯回答
念初

// 插入
public function charu($data)
{

return $this->insert($data);

}

修改為

// 插入
public function charu($data)
{

return $this->data($data)->save();

}
試試?

你直接調(diào)用insert()方法是調(diào)用了User類的父類Model類,但是Model類沒有這個方法,所以執(zhí)行了里面的__Call方法,指向到了Query類(該類沒有綁定你的事件),想要激發(fā)User類上的事件,必須要調(diào)用Model類中指定的方法進行增刪改查才行(save(),delete())這些方法

2018年9月17日 02:08
編輯回答
巫婆

沒看模型事件中的相關(guān)評論吧?沒粗略看代碼吧?使用模型中的方法插入,刪除數(shù)據(jù)才會觸發(fā)這個模型事件,比如save,delete方法。但insert方法是模型中的操作嗎?db類中的方法不會觸發(fā)模型事件

2017年6月6日 02:34