【发布时间】:2011-10-17 11:15:29
【问题描述】:
我为每种语言使用不同的路由表,并且我编写了更改语言并重定向到同一页面但使用目标语言(和目标 URL)的操作。
主要问题是我的操作太复杂了——我怎样才能让它变得简单? 它应该更改语言并重定向到新的 url(目标语言)。
简而言之:我们有一种语言的随机有效蛋糕网址,我们必须将其翻译成另一种语言的适当网址。
我的路由表:
if( 'en' == Configure::read('Config.language') ) {
Router::connect('/help', array('controller' => 'pages', 'action' => 'display', 'help') );
} else {
Router::connect('/pomoc', array('controller' => 'pages', 'action' => 'display', 'help') );
}
动作改变语言:
function lang($lang) {
// getting previous url table
$url = $this->referer();
$url = Router::parse($url);
// changing language
if( in_array($lang, Configure::read('Languages.valid') ) ) {
$this->Session->write('Language', $lang);
Configure::write('Config.language', $lang);
}
// saving base params
$requestInfo = array(Router::getParams(), Router::getPaths());
// reload routing table
Router::reload();
include(CONFIGS.'routes.php');
// restore base params
Router::setRequestInfo($requestInfo);
// fix for 'pass' params
if(!empty($url['pass']) && is_array($url['pass'])) {
$url = array_merge($url, $url['pass']);
unset($url['pass']);
}
$this->redirect($url);
}
关于 url 表中的 'pass' 键:
/pages/display/help
在Router::parse()之后,提取参数:
pass => array(
0 => 'help'
)
后来从 Router::url() 返回的值看起来像这样:
/pages/display/pass:Array
所以我必须通过将 'pass' 值与整个数组合并并删除键来修复它
【问题讨论】:
-
您能否提供更多关于您想要的确切“流程”的信息?据我了解,您希望能够在页面(例如您的帮助页面)上有一个链接,上面写着“在 $language 中查看此页面”,对吗?那么您实际上将您提到的
lang()操作称为哪里? -
它在每个页面的“选择语言”框中
标签: cakephp routing cakephp-1.3