2017-04-27 11:59:22 2944次浏览 2条回答 0 悬赏 10 金钱

项目里批量删除时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分
  • 粉丝1
  • 金钱530
  • 威望0
  • 积分610

热门问题