每个控制器之前的Yii Framework动作

时间:2017-03-07 08:24:10

标签: php yii controller

有没有"主要"控制器从文件夹"控制器"?之前的每个其他控制器之前触发我有一个项目,每个用户都有不同的网站语言,所以我想先检查设置,然后使用以下语言设置语言:

Yii::$app->language='en-EN';

现在我在每个控制器中执行此操作,但我想这应该是一个更容易的选择。

2 个答案:

答案 0 :(得分:2)

我之前遇到同样的问题,并通过添加另一个组件找到了解决方案。

How to load class at every page load in advanced app

将config中的类添加到组件部分,并通过添加到bootstrap来加载它。

<强>的config.php

$config = [
    // ..
    'components' => [
        'InitRoutines' => [
            'class' => 'app\commands\InitRoutines', // my custom class
        ],
    ],
];

$config['bootstrap'][] = 'InitRoutines';

然后让您的课程使用Component方法

扩展init()

<强> InitRoutines.php

namespace app\commands;

use Yii;
use yii\base\Component;
use app\commands\AppHelper;
use app\commands\Access;

class InitRoutines extends Component
{
    // this method runs at start at every page load
    public function init()
    {
        parent::init();
        Access::checkForMaintenance(); // my custom method
        Yii::$app->language = AppHelper::getUserLanguageCode(); // my custom method
    }
}

答案 1 :(得分:2)

您可以附加到应用程序事件beforeActionbeforeRequest并在此处执行您的操作。对我来说似乎更容易:

$config = [
    // ..
    'on beforeRequest' => function($event) {
        Yii::$app->language='en-EN';           
    }
];