在 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()
我想在我的控制器中同时使用 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()