MyTetra Share
Делитесь знаниями!
Роутинг в CodeIgniter 2
Время создания: 31.01.2023 09:01
Текстовые метки: php, codeigniter, route, роутинг, перенаправление
Раздел: Компьютер - Программирование - Язык PHP - CodeIgniter
Запись: xintrea/mytetra_syncro/master/base/1675144914q3t3wdb5or/text.html на raw.github.com

CodeIgniter User Guide Version 2.1.3


URI роутинг


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


example.com/class/function/id/


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

К примеру, давайте предположим, что вы хотите, чтобы URL соответствовал этому прототипу:


example.com/product/1/

example.com/product/2/

example.com/product/3/

example.com/product/4/


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


Установка ваших собственных правил

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


Шаблоны

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


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


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

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


(:num) совпадет с сегментом, который содержит только цифры.

(:any) совпадет с сегментом, содержащим любой символ.


Примечание: Роуты работают в том порядке, в котором они определены. Вышестоящие роуты имеют преимущество над теми, которые определены ниже по коду.


Примеры

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


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


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


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


URL, содержащий сегменты blog/joe, будет перенаправлен в класс "blogs" методу "users". Идентификатор будет установлен в "34".


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


URL, содержащий слово "product" в первом сегменте, и любое содержание во втором, будет перенаправлен в класс "catalog" и функцию "product_lookup".


$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";


URL со словом "product" в первом сегменте, и с номером во втором, будет перенаправлен в класс "catalog", и его методу "product_lookup_by_id" будет передана переменная из второго сегмента URI.

Важно: не используйте ведущие или завершающие слеши.


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

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

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

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


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


В этом примере URI, соответствующий products/shirts/123 вызовет контроллер shirts и функцию id_123.

Также вы можете смешивать шаблоны и регулярные выражения.


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

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


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


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


$route['404_override'] = '';


Этот роут определяет, какой контроллер должен использоваться, если запрашиваемый не найден. Он перепишет страницу 404 по умолчанию. Это не повлияет на функцию show_404(), которая будет загружать файл error_404.php, находящийся в application/errors/error_404.php.

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


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования