Определить шаблон для параметров, передаваемых по сегменту URL-адреса на коде

Я нашел способ определить шаблон для передачи параметра на 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)));

Это работает … но я хотел бы знать, есть ли способ, где мне не нужно изменять файл в системной папке … Я понял, что это не очень хорошая идея.

Спасибо.

1

Решение

Вы можете сделать это внутри 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';
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]