Yii前控制器在路由之前的实现



我想为所有控制器实现一个语言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);
  }
}

相关内容

  • 没有找到相关文章

最新更新