Я нашел способ определить шаблон для передачи параметра на url на codeigniter... Я имею в виду шаблон, чтобы сделать что-то вроде этого:
www.example.com/part/of/url/parameter1/parameter2
Мне нужно было пройти mac, поэтому шаблон должен совпадать с XX-XX-XX-XX-XX-XX, иначе инфраструктура отправит 404.
Ну, как я уже сказал, я нашел способ сделать это, но я не знаю, лучший ли это. То, что я сделал, - это изменить файл в системной папке... в частности, файл: system/core/Router.php, я изменил строку по умолчанию 379 и поместил эту другую:
$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', str_replace(':mac', '[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}', $key)));
Он работает... но я хотел бы знать, есть ли способ, которым мне не нужно изменять файл в системной папке... Я понял, что это не очень хорошая идея.
Спасибо.
Вы можете сделать это внутри config/routes.php
например:
$route['part/of/url/parameter1/([0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2})'] = 'my/routed/$1';
он будет маршрутизировать только URL-адреса, соответствующие вашему шаблону. см. http://www.codeigniter.com/user_guide/general/routing.html в разделе "Регулярные выражения"
или, вы можете сделать это в конце ваших routes.php
.
$route['part/of/url/parameter1/(:mac)'] = 'my/routed/$1';
$temp = [];
foreach($route as $key => $value)
{
$key = str_replace(':mac', '[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}', $key);
$temp[$key] = $value;
}
$route = $temp;
чтобы использовать чистый код, хорошо положить эту часть на hooks
, взгляните на https://ellislab.com/codeigniter/user-guide/general/hooks.html
Это действительно важно, чтобы сохранить system
файлы неповрежденными, потому что вы захотите обновить codeigniter в будущем.
просто другим способом:
// my rules
$mac = '[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}';
$route["part/of/url/parameter1/($mac)"] = 'my/routed/$1';