0

在本文中实施了解决方案。

" 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);
   }
}

但是我的视图文件中有许多 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 添加前缀。还是我应该手动添加到所有链接?

相关:在 CakePHP CakePHP 2.x i18n 路由CakePHP 2.1 URL 语言参数
中为每个 URL 添加前缀

4

1 回答 1

1

您应该使用HtmlHelper::link()和生成应用程序中的所有链接和 URLHtmlHelper::url()

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

例如,如果您决定为 定义一个“友好”的 URL 路由/logout/users/logout那么:

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

将创建此链接:

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

如果您稍后决定修改/sign-out注销 URL 的“友好”URL 路由 ( ),则应用程序中的所有链接都将自动调整。

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

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

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

反向路由

于 2013-04-04T21:25:24.723 回答