Kohana обладает очень гибким механизмом маршрутизации (
routing), основная задача которой по переданной в
url строке определить контроллер (
controller), который будет обрабатывать переданный запрос, и, в частности, конкретный метод экшен (
action), который будет вызван.
Напомню, что настройка правил маршрутизации осуществляеться в файле bootstrap.php, расположенный в директории
application, корневой директории web сайта.
Общее правило формирования маршрутизации по умолчанию выглядит следующим образом (фрагмент из
bootstrap.php):
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'article',
'action' => 'index',
));Определение правил маршрутизации происходит с помощью статического метода
set класса
Route. При вызове метода
set используют два обязательеых и один не обязательный параметр:
где
-
default — имя создаваемого маршрута, может быть любым (обязательный параметр)
— (
<controller>(/<action>(/<id>))) — правило, согласно которому формируется маршрут в
Kohana. Запрос
url, переданный браузером клиента, будет сравниваться
Kohana с заданными правилами. По совпавшему правилу
Kohana определит контроллер и его метод (action), чтобы обработать данный вызов. Круглые скобки указывают на необязательность элементов
urlзапроса. Запрос при этом может выглядеть так:
http://site.ru/index.php
. Как же тогда Kohana определит какой контроллер и екшен использовать в этом случае? Для этого существуют значения по умолчанию, которые задаються с помощью метода
default:
->defaults(array(
'controller' => 'article',
'action' => 'index',
))
Эта запись означает, что как только отработает метод
set, вызоветься метод
default, который установит значение котроллера и его метода екшен по умолчанию (
'controller'=>article, 'action' => index). Данные значения передаються в метод
default в виде ассоциативного массива. Соответсвенно следующие запросы
Kohana обработает одинаково и вызовет один и тот же контроллер '
article' и его екшен '
index':
http://site.ru/index.php
http://site.ru/index.php/article/index
В процессе изучения программированию с помощью
Kohanaвозникла необходимость обрабатывать запросы следующих видов:
- http://site.ru/article/<идентификатор> - отображение статьи по идентификатору
- http://site.ru/author/<идентификатор> - вывод списка статей определенного автора
- http://site.ru/year/month/day - вывод списка статей, опубликованных в заданную дату
year/month/day (год/месяц/число, напрмер 2011/11/21)
Фрагмент кода из файла
bootstrap.php, с соответсвующими правилами маршрутизации:
Route::set('article','article(/<action>)/<id>',
array('id' => '\d+'))
->defaults(array(
'controller' => 'article',
'action' => 'id',
));
Route::set('author','author(/<action>)/<id_author>',
array('id_author' => '\d+'))
->defaults(array(
'controller' => 'article',
'action' => 'author',
));
Route::set('date','<year>(/<month>(/<day>))',
array(
'year' => '\d+',
'month' => 'd+',
'day' => '\d+',
))
->defaults(array(
'controller' => 'article',
'action' => 'date',
));