在Kohana修改url param 3.3

时间:2012-11-05 03:12:45

标签: php kohana kohana-3

有没有办法在加载时更改网址请求中的参数?

我的路线基本上会检查网址http://localhost/<language>/<controller>

中的语言

但问题是,如果在语言参数中插入随机文本,则会加载默认文本,我设置翻译文件的方式将输出menu.home

之类的内容

管理员是否仍然使用默认语言重定向到网址? 例如http://localhost/fakeLanguage/home将重定向到http://localhost/en/homehttp://localhost/fakeLanguage/about重定向到http://localhost/en/about

2 个答案:

答案 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);
?>