首页 > 解决方案 > 让所有控制器中的每个函数在执行函数之前执行一些代码,而不在 Yii2 中的每个函数中添加代码

问题描述

我有一个用于检查Yii2中是否存在会话 isset的代码,我在控制器的函数中添加了代码,这是代码

if(!isset($session['selectedMonth'])){
        return $this->redirect(['select-period/month']);
        return false;
}

我在 10 个控制器中有超过 50 个函数,我希望每个函数都使用该代码,如果不将代码一个一个地放入每个函数中,我该如何实现?

标签: yii2

解决方案


您可以为您的应用程序创建基本控制器,并从中扩展所有其他控制器。然后你可以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);
}

推荐阅读