Codeigniter 3.1 + HMVC + wildcard-роутинг :any и 404 ошибка

пятница, 14 июля 2017 г.

Заголовок получился seo-шный, набор тегов каких-то, но сейчас объясню в чем дело.
Задача стоит такая: при обращении по адресу domain.ru/admin/game/edit/215/ запускать метод edit контроллера Admin модуля Game с параметром 215. Но я бы не стал писать пост если бы все было просто.

Еще раз, используемый стэк: Codeigniter 3.1 + HMVC,  а при обращении к указанному выше URL я получаю 404 ошибку из-за передаваемого параметра в метод edit.

Чтобы URL такого рода срабатывали, то нужно прописать в роутах следующее:

$route['admin/([a-zA-Z0-9_-]+)/(:any)'] = '$1/admin/$2';

Если быть точным, то такой роут срабатывал РАНЬШЕ, а в версии 3.1 он уже не срабатывает.
Сравниваем куски кода из Route.php из метода _parse_routes()

раньше:

$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));

сейчас:

$key = str_replace(array(':any', ':num'), array('[^/]+', '[0-9]+'), $key);

Раньше :any в роутах заменялся на .+, а теперь :any возвращает один сегмент до слэша.

В общем вот верный роутинг:

$route['admin/([a-zA-Z0-9_-]+)/(.+)'] = '$1/admin/$2';

Ошибки 404 нет, параметры в методы передаются корректно.

Copyright © 2010 WEB IT blog