Установка маршрутов codeigniter для языкового пути - PullRequest
3 голосов
/ 04 января 2012

Поэтому я использую Codeigniter 2.1. Интернационализация библиотеки i18n , и мне нужно адаптировать мои маршруты, чтобы использовать языковые параметры в моих коротких URL, где я удаляю имя контроллера:

$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 ]

2 голосов
/ 24 февраля 2012

Для всех, кто использует эту библиотеку и хочет установить пользовательские маршруты, для того, чтобы они работали, вы должны будете сделать это в следующем порядке:

  1. пользовательские маршруты
  2. Маршруты, добавленные библиотекой

пример:

$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 голос
/ 04 января 2012

Этот тип игнорирует назначение контроллеров, но если вы знаете, что что-либо с «результатами» в качестве второго сегмента должно использовать контроллер «выборки», вы можете сделать это:

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

EDIT:

Это потому, что ваша (: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";
...