CodeIgniter, руководство пользователя к версии 1.6.1


URI Роутинг

Как правило есть соответствие один-к-одному между строкой URL и соответствующим контроллером/методом. Сегменты URL обычно формируются по этому шаблону:

www.your-site.com/class/function/id/

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

Например, вы хотите чтобы ваши адреса соответствовали этому шаблону:

www.your-site.com/product/1/
www.your-site.com/product/2/
www.your-site.com/product/3/
www.your-site.com/product/4/

Как правило второй сегмент адресной строки резервируется для имени функции, но в примере выше мы хотим использовать вместо него ID. Чтобы сделать это, необходимо перенаправить адрес на обработчик URL CodeIgniter.

Установка правил собственной маршрутизации

Правила маршрутизации объявляются в вашем файле application/config/routes.php. В нем вы увидите массив с названием $route, при помощи которого вы сможете переопределить адреса. Роуты могут быть определены двумя способами: маской или Регулярными Выражениями

Маски

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

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

В роуте ключ массива содержит URI в котором будет искаться соответствие, а в значении содержится путь, куда необходимо переадресовать обработчик. Если в приведенном выше примере слово «product» находится в первом сегменте, а номер во втором сегменте, то вместо этого адреса будет произведено обращение к классу «catalog» и методу «product_lookup».

Вы можете использовать буквы или два типа заполнителя:

:num
:any

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

Замечание: Роуты будут работать в том порядке, в котором они определены. Ранее определенные всегда будут преобладать над определенными позже.

Примеры

Вот несколько примеров маршрутизации:

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

URL содержащий слово «journals» в первом сегменте будет переадресован к классу «blogs».

$route['blog/joe'] = "blogs/users/34";

URL содержащий сегменты «blog/joe» будет переадресован к классу «blogs» и методу «users». ID будет установлен в значение «34».

$route['product/:any'] = "catalog/product_lookup";

URL со словом «product» в первом сегменте, и любым другим во втором будет перенаправлен к классу «catalog», методу «product_lookup».

Важно: Не используйте начинающих/конечных слешей.

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

При желании вы можете использовать Регулярные Выражения для определения правил роутинга. Допускается любое правильное регулярное выражение, как и обратные ссылки.

Замечание:  Если вы используете обратные ссылки, то должны пользоваться синтаксисом доллара и затем двойной бэкслеш.

Типичный RegEx роут должен выглядеть так:

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

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

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

Зарезервированные роуты

Есть два зарезервированных роута:

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

Этот роут показывает что необходимо загружать, когда пользователь ввел корневой адрес, т.е. прямо не показал к какому контроллеру обращаться. В этом примере будет загружен класс «welcome». Вам рекомендуется всегда указывать этот роут, т.к. страницы 404 будут, по умолчанию, ссылаться на него.

$route['scaffolding_trigger'] = 'scaffolding';

Здесь вам предлагается установить секретное слово, при наличии которого в URL будет активироваться возможность скаффолдинга. Пожалуйста прочтите главу Скаффолдинг для выяснения подробностей.

Важно:  Зарезервированные роуты должны быть объявлены раньше роутов с Масками или Регулярными Выражениями.