Маршрутизация URI

 

Обычно между строкой URL и классом и методом контроллера существует прямое соответствие.
Сегменты URI обычно соответствуют следующему шаблону:

  1. 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 который позволяет задать пользовательские критерии маршрутизации. Правила могут быть заданы при помощи масок или регулярных выражений.

Маски

Типичное правило маршрутизации с использованием масок может выглядеть следующим образом:

  1. $route['product/:num'] = "catalog/product_lookup";

В массиве правил маршрутизации индексом является обрабатываемый URI, а значением - назначение маршрутизации. В приведённом выше примере, если строка "product" является первым сегментом URI, а вторым сегментом является число, то то будет вызван метод product_lookup контроллера catalog.

Вы можете использовать следующие маски:
:num
:any
:num соответствует сегменту содержащему только цифры
:any соответствует сегменту содержащему любые символы

Примечание: правила маршрутизации обрабатываются в порядке определения. Определённые выше правила обрабатываются в первую очередь.

Примеры

Ниже приведены примеры правил маршрутизации

  1. $route['journals'] = "blogs";

Запрос URL содержащий слово 'journals' будет перенаправлен на класс 'blogs'.
  1. $route['blog/joe'] = "blogs/users/34";

Запрос URL содержащий сегменты "blog/joe" будет перенаправлен на метод users класса blogs , при этом ID будет установлен в значение "34".
  1. $route['product/:any'] = "catalog/product_lookup";

Запрос URL c "prodcuts" в качестве первого сегмента и какой-либо строкой во втором сегменте будет перенаправлен к методу product_lookup класса catalog.
Важно: Не используйте слэш к конце и/или начале строки.

Регулярные выражения

По желанию вы можете использовать регулярные выражения для определения правил маршрутизации. Допустимы любые валидные регулярные выражения, как и обратные ссылки в них.
При использовании обратных ссылок нужно использовать синтаксис с $. Типичное правило маршрутизации с использованием регулярных выражений может выглядеть примерно так:

  1. $route['products/([a-z]+)/(\d+)'] = "$1/id_$2";

В примере выше, запрос URI типа products/shirts/123 приведёт к вызову контроллера shirts и метода id_123.

Вы можете использовать и маски и регулярные выражения для задания правил маршрутизации.

Зарезервированные правила

Существуют два зарезервированных правила маршрутизации:

  1. $route['default_controller'] = 'welcome';

Это правило задаёт имя контроллера, который будет загружен если URI не содержит данных, что происходит когда посетитель запрашивает корневой URL вашего приложения. В приведённом выше случае будет загружен контроллер welcome. Рекомендуется всегда задавать контроллер по умолчанию, иначе будет сгенерирована ошибка 404.
  1. $route['scaffolding_trigger'] = 'scaffolding';

Данное правило позволяет задать ключевое слово, присутствие которого в URL активирует режим конструктора (scaffolding).

Примечание: зарезервированные правила маршрутизации должны быть определены перед какими-либо другими пользовательскими правилами.

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

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <b> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <h2> <h3> <h4> <table> <tr> <td> <th>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

Подробнее о форматировании

CAPTCHA
Этот вопрос предназначен для того, чтобы отсеять ботов
10 + 4 =
Решите простой математический пример и введите результат. К примеру, для вопроса 1+3 нужно ввести 4

Вход в систему

Последние комментарии