在 Yii2 的控制器中同时使用 beforeAction() 和 behaviors() 方法

use both beforeAction() and behaviors() method in controller in Yii2

我想在我的控制器中同时使用 beforeAction()behaviors() 方法。

如果我在代码中添加 beforeAction() 方法,那么 behaviors() 方法将不起作用。

如果我删除 beforeAction() 方法,那么 behaviors() 方法就可以正常工作。

我不想删除 beforeAction(),因为它用于禁用 ajax 调用的 csrf 令牌。

public function beforeAction($action)
{
  if($action->id =='ignore' || $action->id =='accept')
  {
    $this->enableCsrfValidation = false;
  }
  return true;
}

我想使用 behaviors() 方法进行身份验证。

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'only' => ['create','index','update','change','view','page','active','list'],
            'rules' => [
                [
                    'actions' => ['create','index','update','change','view','page','active','list'],
                    'allow' => true,
                    'roles' => ['@'],
                    'matchCallback' => function ($rule, $action)
                    {
                      echo "string";
                      die;
                    },
                ],
            ],
            'denyCallback' => function ($rule, $action) {
                return $this->redirect(Yii::$app->request->baseUrl);
            }
        ],
    ];
}

有没有办法在同一个控制器中同时使用这两种方法。

public function beforeAction($action)
{
  if($action->id =='ignore' || $action->id =='accept')
  {
    $this->enableCsrfValidation = false;
  }
  //return true;
  return parent::beforeAction($action);
}

你需要 return 父 beforeAction()