Я довольно уверен, что ^
не является необходимым. Попробуйте без него:
$route['(en|es|ro)/tag/(:any)'] = "fetch/results?search_query=$1&search=tag";
В этом контексте ^
будет рассматриваться как текстовая строка. Если вы хотели сверху использовать регулярное выражение, я полагаю, вы бы обернуть сам регулярное выражение в скобках, например:
$route['(^(en|es|ro))/tag/(:any)'] = "fetch/results?search_query=$1&search=tag";
Я не 100% уверен в том, что, но если я правильно и должен Работа. Тем не менее, маршруты всегда предполагают, что первая часть шаблона - это то, с чего должна начинаться строка, поэтому ^
не обязательно должен быть необходим.
Еще одна вещь: Вы не используете второй матч, но первый. Я считаю, что вы хотите заменить $1
$2
на вашем маршруте.
$route['(en|es|ro)/tag/(:any)'] = "fetch/results?search_query=$2&search=tag";
// ^^^1^^^^ ^^^2^^ ^^
EDIT: После дальнейших исследований и испытаний, кажется, что Codeigniter не может правильно обрабатывать маршруты, которые используют строку запроса, как ?key=value
. Если вы используете слэш перед знаком ?
вопрос, вы можете по крайней мере, получить его маршрут к правильному контроллеру и способу:
$route['(en|es|ro)/tag/(:any)'] = "fetch/results/?search_query=$2&search=tag";
URL-адрес, как это:
http://example.com/es/tag/Codeigniter's Router
...будет направлен к методу results
с этой строкой в качестве аргумента, но $_GET
будет пустым:
?search_query=Codeigniter%27s%20Router&search=tag
Таким образом, вы можете выбрать обособленно аргумент с parse_str()
:
function results($request)
{
$request = ltrim($request, '?');
parse_str($request, $get);
// echo $get['search_query']
}
Конечно, вы всегда можете использовать .htaccess
, но я понимаю желание сохранить всю логику маршрутизации в одном месте. Извините, если это не тот ответ, на который вы надеялись, но я боюсь, что без написания настраиваемого маршрутизатора это невозможно сделать в Codeigniter. Мое предложение, вероятно, было бы найти другой способ обработки вашей маршрутизации и способ доступа к данным из URL-адреса.
^заставляет матч в начале строки, но я не вижу, что картина в этом вопросе в любом месте, то/ен/часть происходит в середине. – sweaver2112
это 'en /', и как он работает, что 'en' является совпадением в начале строки. Так работает библиотека. Это не проблема, но tnx в любом случае – Alex