我想为所有控制器实现一个语言Setter,并且需要在路由到控制器->前端控制器之前运行这个方法。
如果在我的控制器类中实现了一个方法,但对于某些用途,它必须在控制器初始化之前更早运行
class Controller extends CController
{
public function __construct($id, $module = null)
{
// Set the application language
if (isset($_GET['language']))
{
$lang = $_GET['language'];
您可以使用应用程序的onBeginRequest
事件。这通常需要向index.php
添加一些代码。这里有一个快速的例子:
$app = Yii::createWebApplication($config);
$app->onBeginRequest = function($event) {
// ... whatever you want to do
}
$app->run();
当然,您也可以附加任何其他有效的回调函数,而不是闭包函数。
您可以覆盖beforeAction($action)
class Controller extends CController
{
public function beforeAction($action)
{
$language = !empty($_GET['lang']) ? $_GET['lang'] : 'en';
return parent::beforeAction($action);
}
}