我在 Yii2 中有一个用于检查是否已设置会话的代码,我在控制器的函数内部添加了代码,这是代码
if(!isset($session['selectedMonth'])){
return $this->redirect(['select-period/month']);
return false;
}
我在10个控制器中有50多个功能,我希望每个功能都使用该代码,如何在不将代码逐一放入每个功能的情况下实现呢?
答案 0 :(得分:0)
您可以为您的应用创建基本控制器,并从中扩展所有其他控制器。然后,您可以在此基本控制器中添加beforeAction()
方法,以便从基本控制器继承的所有控制器都可以使用该方法:
public function beforeAction($action) {
// initialize $session here
if(!isset($session['selectedMonth'])){
Yii::$app->response->redirect(['select-period/month']);
return false;
}
return parent::beforeAction($action);
}
答案 1 :(得分:-1)
您可以创建将处理'before action' event的简单行为,例如:
use Yii;
use yii\base\Behavior;
use yii\base\Controller;
class RedirectBehavior extends Behavior
{
public function events()
{
return [
Controller::EVENT_BEFORE_ACTION => 'beforeAction',
];
}
public function beforeAction($event)
{
if (Yii::$app->session->has('selectedMonth')){
return;
}
Yii::$app->getResponse()->redirect(['select-period/month'])->send();
}
}
并将其附加到您的控制器上
public function behaviors()
{
return [
'redirect' => [
'class' => RedirectBehavior::className(),
],
];
}