按照ThinkPHP5.0官方手册提示:
User::event('before_insert', function ($user) { if ($user->status != 1) { return false; } });
我尝试使用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();
执行结果如下
直接插入成功了,没有受到前置动作的影响,请问这是为什么呢?
// 插入
public function charu($data)
{
}
修改为
// 插入
public function charu($data)
{
}
试试?
你直接调用insert()方法是调用了User类的父类Model类,但是Model类没有这个方法,所以执行了里面的__Call方法,指向到了Query类(该类没有绑定你的事件),想要激发User类上的事件,必须要调用Model类中指定的方法进行增删改查才行(save(),delete())这些方法