我在本文中实施了解决方案。
" 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 添加前缀