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 будет активироваться возможность скаффолдинга. Пожалуйста прочтите главу Скаффолдинг для выяснения подробностей.
Важно: Зарезервированные роуты должны быть объявлены раньше роутов с Масками или Регулярными Выражениями.