Маршрутизация URI
- Автор mityok on июля 10th, 2008
Обычно между строкой URL и классом и методом контроллера существует прямое соответствие.
Сегменты URI обычно соответствуют следующему шаблону:
www.your-site.com/class/function/id/
В некоторых случаях вы можете захотеть переопределить это соответствие так, чтобы другой класс/метод вызывался вместо того, который соответствует сегментам URL.
К примеру, вы можете захотеть чтобы ваши URL соответствовали прототипу:
www.your-site.com/product/1/
www.your-site.com/product/2/
www.your-site.com/product/3/
www.your-site.com/product/4/
Обычно второй сегмент URL используется для имени функции, но в приведённом выше примере он используется для идентификатора продукта. Чтобы разрешить данную ситуацию CodeIgniter позволяет переопределить обработчик URI.
Установка правил маршрутизации
Правила маршрутизации определяются в файле application/config/routes.php. В данном файле размещается массив $route который позволяет задать пользовательские критерии маршрутизации. Правила могут быть заданы при помощи масок или регулярных выражений.
Маски
Типичное правило маршрутизации с использованием масок может выглядеть следующим образом:
$route['product/:num'] = "catalog/product_lookup";
В массиве правил маршрутизации индексом является обрабатываемый URI, а значением - назначение маршрутизации. В приведённом выше примере, если строка "product" является первым сегментом URI, а вторым сегментом является число, то то будет вызван метод product_lookup контроллера catalog.
Вы можете использовать следующие маски:
:num
:any
:num соответствует сегменту содержащему только цифры
:any соответствует сегменту содержащему любые символы
Примечание: правила маршрутизации обрабатываются в порядке определения. Определённые выше правила обрабатываются в первую очередь.
Примеры
Ниже приведены примеры правил маршрутизации
$route['journals'] = "blogs";
Запрос URL содержащий слово 'journals' будет перенаправлен на класс 'blogs'.
$route['blog/joe'] = "blogs/users/34";
Запрос URL содержащий сегменты "blog/joe" будет перенаправлен на метод users класса blogs , при этом ID будет установлен в значение "34".
$route['product/:any'] = "catalog/product_lookup";
Запрос URL c "prodcuts" в качестве первого сегмента и какой-либо строкой во втором сегменте будет перенаправлен к методу product_lookup класса catalog.
Важно: Не используйте слэш к конце и/или начале строки.
Регулярные выражения
По желанию вы можете использовать регулярные выражения для определения правил маршрутизации. Допустимы любые валидные регулярные выражения, как и обратные ссылки в них.
При использовании обратных ссылок нужно использовать синтаксис с $. Типичное правило маршрутизации с использованием регулярных выражений может выглядеть примерно так:
$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";
В примере выше, запрос URI типа products/shirts/123 приведёт к вызову контроллера shirts и метода id_123.
Вы можете использовать и маски и регулярные выражения для задания правил маршрутизации.
Зарезервированные правила
Существуют два зарезервированных правила маршрутизации:
$route['default_controller'] = 'welcome';
Это правило задаёт имя контроллера, который будет загружен если URI не содержит данных, что происходит когда посетитель запрашивает корневой URL вашего приложения. В приведённом выше случае будет загружен контроллер welcome. Рекомендуется всегда задавать контроллер по умолчанию, иначе будет сгенерирована ошибка 404.
$route['scaffolding_trigger'] = 'scaffolding';
Данное правило позволяет задать ключевое слово, присутствие которого в URL активирует режим конструктора (scaffolding).
Примечание: зарезервированные правила маршрутизации должны быть определены перед какими-либо другими пользовательскими правилами.

Отправить комментарий