2013-04-04 117 views
0

我实施了解决方案at this articleCakePHP向URL添加语言参数

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

但我有很多网址在我的视图文件中写入而不使用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> 

但它似乎没有一个很好的方法。有没有更好的方式为网址添加前缀?或者我应该手动添加到所有链接?

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

回答

1

你应该使用HtmlHelper::link()HtmlHelper::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)作为注销网址,则应用程序中的所有链接将自动进行调整。

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

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

了解更多关于这个问题在这里:

Reverse Routing