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

1

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

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

Спасибо.

Теги:
codeigniter
pattern-matching
url
parameters

1 ответ

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';
  • 0
    Спасибо @Guiherme ... но ... нет нигде, где определить их и, наконец, можно написать: $ route ['/ part / of / url / (: mac)'] это как сейчас, и я думаю, что это удобнее ... я думаю объединить переменную $ mac = "the_pattern" по индексу маршрута ??? : /
  • 0
    @ EloyFernándezFranco, сделал те же обновления, надеюсь, это поможет
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню