Урок 3. Базовый набор роутовРассмотренный в уроке 2 набор контроллеров требует создания дополнительных роутов(route), поэтому создадим загрузчик init.php в модуле common и разместим в нем основные роуты нашей CMS.
Код:
if ( ! Route::cache())
{
// AJAX запросы, data_type - определяет какой тип данных должен вернуть контроллер
Route::set('ajax', 'ajax/<controller>(/<action>(/<data_type>))', array(
'data_type' => '(html|json|xml)',
))
->defaults(array(
'directory' => 'Ajax',
'controller' => '',
'action' => 'index',
'data_type' => 'json',
));
// Для виджеты
Route::set('widget', 'widget/<controller>')
->defaults(array(
'directory' => 'Widget',
'controller' => '',
'action' => 'index',
));
// Страницы - список
Route::set('list', '<controller>/list(/<page>(-<total>(/<per_page>((/<order>(/<direction>))))))', array(
'page' => '[0-9]+',
'total' => '[0-9]+',
'per_page' => '[0-9]+',
'order' => '[\w\-]+',
'direction' => '(asc|desc)',
))
->defaults(array(
'directory' => 'Page',
'controller' => '',
'action' => 'list',
'page' => '1',
'total' => '1',
'per_page' => '10',
'order' => 'id',
'direction' => 'asc',
));
// Страницы - остальные действия, slug - ЧПУ ИД
Route::set('item', '<controller>/(/<action>(/<slug>))', array(
'slug' => '[\w\-/]+',
))
->defaults(array(
'directory' => 'Page',
'controller' => 'Home',
'action' => 'index',
));
}
Важно помнить, что базовые роуты должны добавляться последними, а значит модули, содержащие роуты, должны подключаться
до commmon. Подключение модулей происходить в bootstrap приложения(`APPPATH.bootstrap`), следовательно роуты самого приложения должны подключаться
до подключения модулей.
Примерный код bootstrap приложений:
Код:
if ( ! Route::cache())
{
// Здесь подключаются роуты приложения
}
Kohana::modules(array(
'captcha' => MODPATH.'captcha', // Имеет роут, поэтому подключен до common
'common' => MODPATH.'common', // Содержит базовые роуты
'cache' => MODPATH.'cache', // Не содержит роутов
// ...
));
if ( ! Route::cache())
{
// Кешируем роуты
Route::cache(Kohana::$caching);
}
В принципе базовых роутов достаточно для решения большинства задач, добавлять роуты в приложении может понадобиться только в специфических случаях или для создания более коротки\красивых ссылок, например для страниц аутентификации и регистрации пользователей.
Пример роута для страниц аутентификации и регистрации:
Код:
Route::set('auth', '<action>', array(
'action' => '(login|register|remind_password|register_confirm)',
))
->defaults(array(
'directory' => 'Page',
'controller' => 'User',
'action' => 'login',
));
Я не стал добавлять подобные роуты в список базовых т.к. они не являются необходимыми и при желании могут быть добавлены, например, только в frontend приложении.