设置语言路径的codeigniter路由

时间:2012-01-03 22:14:55

标签: php regex codeigniter internationalization codeigniter-routing

所以我使用的是Codeigniter 2.1 Internationalization i18n Library,我需要调整我的路线,以便在我删除控制器名称的短网址中使用语言参数:

$route['default_controller'] = "home";

#$route['^(en|es|ro)/(.+)$'] = "$2";
#$route['^(en|es|ro)$'] = $route['default_controller'];

$route['results$']      = "fetch/results";
$route['video/(:any)']  = "fetch/video/$1";
$route['tag/(:any)']    = "fetch/tag/$1";

$route['404_override'] = '';

所以我需要让这项工作http://localhost/app/en/results?query=t-shirts而不是http://localhost/app/en/fetch/results?query=t-shirts

我该如何实现?

编辑:

$route['^(en|es|ro)/results$'] = "fetch/results";
$route['^(en|es|ro)/video/(:any)'] = "fetch/video/$1";
$route['^(en|es|ro)/video/(.+)$'] = $route['^(en|es|ro)/(.+)$'] = "$2";"fetch/video/$2";

以上都不起作用。

如果我http://localhost/app/en/fetch/video/asfasf完美运作

这不是http://localhost/app/en/video/asfasf

我得到的错误是404:

404 Page Not Found

The page you requested was not found.

发现问题

因此,出于某种原因,在我尝试做之前设置此$route['^(en|es|ro)/(.+)$'] = "$2";是导致问题。

2 个答案:

答案 0 :(得分:2)

对于任何使用该库并希望设置自定义路线的人来说,为了使他们能够工作,您必须按此顺序进行:

  1. 自定义路线
  2. 图书馆添加的路线
  3. 示例:

    $route['default_controller'] = "home";
    
    //First
    $route['^(en|es|ro)/video/(.+)$'] = "fetch/video/$2";
    $route['^(en|es|ro)/results$']     = "fetch/results$2";
    //Second
    $route['^(en|es|ro)/(.+)$']        = "$2";
    $route['^(en|es|ro)$'] = $route['default_controller'];
    
    
    $route['404_override']  = '';
    

答案 1 :(得分:1)

这种方式违背了控制器的目的,但是如果你知道任何带有“结果”作为第二段的东西都应该使用“fetch”控制器,你可以这样做:

$route['^(en|es|ro)/results$'] = "fetch/results";

修改

这是因为您的(:any)行在正确的行之前捕捉到了。亦是 ”。” (点)字符也会匹配正斜杠,这可能不是你想要的。

$route['^(en|es|ro)/results$']       = "fetch/results";
$route['^(en|es|ro)/video/([^/]+)$'] = "fetch/video/$2";
$route['^(en|es|ro)/video/(:any)']   = "fetch/video/$1";