有没有办法在加载时更改网址请求中的参数?
我的路线基本上会检查网址http://localhost/<language>/<controller>
但问题是,如果在语言参数中插入随机文本,则会加载默认文本,我设置翻译文件的方式将输出menu.home
管理员是否仍然使用默认语言重定向到网址?
例如http://localhost/fakeLanguage/home
将重定向到http://localhost/en/home
,http://localhost/fakeLanguage/about
重定向到http://localhost/en/about
答案 0 :(得分:1)
您的路线必须使用正则表达式过滤细分,如下所示:
// load available language names from config
$langs = Kohana::$config->load('lang.available');
Route::set('lang_route', '<language>/<controller>', array('language' => '('.implode('|', $langs).')'))
->defaults(...);
或者使用route filters,可以轻松修改路段值。
答案 1 :(得分:0)
虽然这只是一个可能解决方案的粗略概念,但您可能需要考虑定义所有支持语言的数组。像这样:
<?php
/*
Part 1 - Create an array of all the known languages. Consider making this part of the application configuration file.
*/
$languages = array(
"en",
"ge",
"pirate"
);
?>
然后检查控制器文件中的该数组。也许使用控制器之前的方法:
<?php
/*
Part 2 - In the controller file add a before method that checks to see if the requested language exists.
*/
public function before(){
if(!in_array($this->request->param('langauge'),$languages)):
// If the language is unknown perform a redirect.
url::redirect('DEFAULT_LANGUAGE_URL');
endif;
}
?>
转换上述网址结构的第一段可以使用以下代码完成:
<?php
// Get the current URI
$url = $this->request->detect_uri();
// Get the query string
// Note: If you aren't interested in preserving the query string this next line can be removed.
if($_SERVER['QUERY_STRING'] != '') $url .= '?'.$_SERVER['QUERY_STRING'];
// Set the default language. Consider setting this in your application configuration file instead.
$defaultLanguage = 'pirate';
// Replace the first URI segment with the default language.
$redirectURL = preg_replace("/^\/.*?(\/.*)$/",("/{$defaultLanguage}$1"),$url,1);
?>