Маршрутизация в Kohana

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',
 ));