【问题标题】:CakePHP adding language parameter to URLsCakePHP 将语言参数添加到 URL
【发布时间】:2013-03-27 03:32:09
【问题描述】:

我实现了解决方案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);
   }
}

但我的视图文件中有许多 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

【问题讨论】:

    标签: cakephp internationalization url-routing cakephp-2.3


    【解决方案1】:

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

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

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

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

    将创建此链接:

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

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

    对 HtmlHelper 的 same 调用现在将输出:

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

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

    Reverse Routing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2015-12-20
      • 2015-04-24
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多