Я нашел способ определить шаблон для передачи параметра на 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';
Других решений пока нет …