如果放在protected / views / layouts / main.php中,
Yii::app()->language = $_SESSION['lang'];
不会影响模块(因为大多数内容是先前生成的)。 例如:Yii用户模块。
将Yii::app()->language = $lang;
放入包含的Yii流程中的最佳文件是什么,以影响所有模块及其语言设置?
答案 0 :(得分:4)
您可以设置一个“基础”控制器来扩展您的控制器(如果您还没有这样的设置)并按照此处所述将您的语言设置放在那里:http://www.yiiframework.com/wiki/26/setting-and-maintaining-the-language-in-application-i18n/
但是,如果您确实在常规PHP会话中拥有该值并且想要设置全局默认值,那么您还应该能够在主配置文件中设置它,例如:
return array(
'language' => $_SESSION['lang'],
'name' => 'My Web Application',
... rest of your config settings...
答案 1 :(得分:1)
我修改了protected/components/Controller.php
,添加了
function init()
{
parent::init();
Yii::app()->language = $_SESSION['lang']; //or some more code;
}
效果很好。
我也尝试在同一个目录中创建MyController.php并扩展Controller.php
,它也可以工作,但它会减慢整个应用程序的速度(很可能是加载器尝试加载,直到加载类,或者因为每次调用课程时都会进行操作;))。
答案 2 :(得分:0)
在config / main.php中读取$ _SESSION时,我们必须记住,如果Yii处理会话,第二个session_start()将产生PHP E_Notice
。
Yii可以处理会话: link, 并且默认情况下应该打开它们,但是当将$ _SESSION代码添加到config.php时,我需要自己添加一个“手动”session_start()。