CakePHP向URL添加语言参数

时间:2013-04-04 21:06:29

标签: cakephp internationalization url-routing cakephp-2.3

我实施了解决方案at this article

beforeFilter”和“_setLanguage”工作正常。如果URL有语言参数,我可以成功设置cookie /会话变量。并在控制器之间使用它。

该解决方案还包括将url()功能添加到AppHelper

class AppHelper extends Helper {
   function url($url = null, $full = false) {
        if(!isset($url['language']) && isset($this->params['language'])) {
          $url['language'] = $this->params['language'];
        }
        return parent::url($url, $full);
   }
}

但我的View文件中有很多URL,这些URL是在不使用HtmlHelper的情况下编写的。像这样:

// myfile.ctp
<a href="/mypage/">click me plase<a>

所以似乎AppHelper :: url解决方案无法解决我的问题。为URL添加语言前缀有什么更好的选择?

我想要定义一个像这样的全局变量:

// AppController::_beforeFilter()
if ($this->request->params['language'] != "")
{
   Configure::write('URLprefix', '/'.$this->request->params['language']);
} else {
   Configure::write('URLprefix', '');
}

然后像这样更改视图文件:

// myfile.ctp
<a href="<?php echo URLprefix; ?>/mypage/">click me plase<a>

但这似乎不是一个好方法。有没有更好的方法来为URL添加前缀。或者我应该手动添加所有链接?

相关:
Adding a prefix to every URL in CakePHP
CakePHP 2.x i18n route
CakePHP 2.1 URL Language Parameter

1 个答案:

答案 0 :(得分:1)

您应使用HtmlHelper::link()HtmlHelper::url()

在应用内生成所有链接和网址

这将确保在生成网址时考虑您的路线(反向路由

例如,如果您决定为/logout定义“友好”网址/users/logout,那么:

echo $this->Html->link('Log out', array(
    'controller' => 'users', 
    'action' => 'logout'
));

将创建此链接:

<a href='/logout'>Log out</a>

如果您以后决定修改退出网址的“友好”网址(/sign-out),则会自动调整您应用中的所有链接。

对HtmlHelper的相同调用现在将输出:

<a href='/sign-out'>Log out</a>

在此处阅读有关此主题的更多信息:

Reverse Routing