2017-06-22 24 views
0

我想在控制器中同時使用beforeAction()behaviors()方法。在Yii2中的控制器中使用beforeAction()和Behavior()方法

如果我在我的代碼中添加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); 
      } 
     ], 
    ]; 
} 

是否有任何方法可以在同一控制器中使用這兩種方法。

回答

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

你需要返回父beforeAction()

相關問題