2017-06-22 6 views
0

コントローラでbeforeAction()behaviors()の両方のメソッドを使用します。コントローラで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); 
      } 
     ], 
    ]; 
} 

同じコントローラで両方の方法を使用する方法はありますか?

答えて

5
あなたは(親beforeActionを返す必要が
public function beforeAction($action) 
{ 
    if($action->id =='ignore' || $action->id =='accept') 
    { 
    $this->enableCsrfValidation = false; 
    } 
    //return true; 
    return parent::beforeAction($action); 
} 

関連する問題