有没有"主要"控制器从文件夹"控制器"?之前的每个其他控制器之前触发我有一个项目,每个用户都有不同的网站语言,所以我想先检查设置,然后使用以下语言设置语言:
Yii::$app->language='en-EN';
现在我在每个控制器中执行此操作,但我想这应该是一个更容易的选择。
答案 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)
您可以附加到应用程序事件beforeAction或beforeRequest并在此处执行您的操作。对我来说似乎更容易:
$config = [
// ..
'on beforeRequest' => function($event) {
Yii::$app->language='en-EN';
}
];