beforeAction返回false的问题 [ 未指定版本 ]
项目里批量删除时action没有运行,单个删除就没问题,看代码是controller类里的beforeAction函数返回false导致没有继续运行,找下去发现是isValid的属性被改变,但我找不到在哪里改变的,为什么会这样
最佳答案
-
johnny1991 发布于 2017-04-27 13:46 举报
isValid是yii\base\ActionEvent里面的一个属性,用来控action是否继续执行的,如果这个isValid为false,则不往下执行,
一般问题出在,behaviors这个方法里面,所以好好检查你的behaviors方法里面的验证,isValid的一般会在这个方法里面赋值;
源码参考:yii\base\ActionFilter(一般controller里面的behaviors类会继承这个类,并且实现beforeAction(),这个方法,由源码可以知道,当具体某个behaviors类的beforeAction()返回值为false的话,那么isValid会被赋值false,那么action就不会执行)
public function beforeFilter($event) { if (!$this->isActive($event->action)) { return; } $event->isValid = $this->beforeAction($event->action); if ($event->isValid) { // call afterFilter only if beforeFilter succeeds // beforeFilter and afterFilter should be properly nested $this->owner->on(Controller::EVENT_AFTER_ACTION, [$this, 'afterFilter'], null, false); } else { $event->handled = true; } }
总结一下,就是查看behaviors里面的每个类的beforeAction方法,看看哪个类的这个方法返回值为false,那么就是问题的所在
颜色
注册时间:2017-04-27
最后登录:2017-12-23
在线时长:8小时12分
最后登录:2017-12-23
在线时长:8小时12分
- 粉丝1
- 金钱530
- 威望0
- 积分610