Kohana. Немного мыслей о дефолтном роутинге

Роутинг
Во всех мануалах по Kohana, в которых рассматривается роутинг, говорится, что сначала надо размещать специфические роуты, потом должны следовать роуты всё более и более общие.

И наконец должен быть роут по-умолчанию, на случай, если ни один из предыдущий не подошёл.

Приводится примерно такой пример:

Route::set('default', '((/(/)))')
->defaults(array(
    'controller' => 'welcome',
    'action'     => 'index',
));


То есть, если URI документа не содержит указания на контроллер и действие, то выполняется welcome/index. Если надо указать другой контроллер и метод, то просто нужно отредактировать это правило.

Ок. С этим всё понятно. Второй момент. Стало уже умолчанием в Kohana, что если в URL указать контроллер, но не указывать вызываемое действие, то используется action_index. Не все знают, что это умолчание поддерживается именно этим же самым роутом.

А вот тут уже проблема!

Допустим вы хотите, чтобы по-умолчанию грузилась некое произвольное действие (не index!!!). Можно написать такой роут:

Route::set('default', '((/(/)))')
	->defaults(array(
		'controller' => 'page',
		'action'     => 'get',
                'id'      => 'contacts',
	));

Но тогда у нас перестанет вызываться index по-умолчанию!

Я в дальнейшей своей практике решил разносить роут для домашней страницы и роут по-умолчанию. Примерно так

Route::set('home', '')
	->defaults(array(
		'controller' => 'page',
		'action'     => 'get',
                'id'      => 'contacts',
	));

Route::set('default', '((/(/)))')
	->defaults(array(
		'action'     => 'index',
            ));

Какие будут мысли?

Kohana. Немного мыслей о дефолтном роутинге: 5 комментариев

  1. Алексей

    Не вижу в этом проблемы. Всё корректно.

  2. Alexey

    home уже давно ставлю отдельным роутом.
    По умолчанию вообще убираю, чтоб контролировать самому все роуты, а не надеятся что он там выполнится или не он.
    Промежуточные с названиями типа page, blog/, article/, user/
    Последним ставлю типа такого
    Route::set(‘static’, »)
    ->defaults(array(
    ‘controller’ => ‘static’,
    ‘action’ => ‘index’,
    ));
    т.е. обычная страница, где slug идет сразу за доменом — если уже и ее нет — то нет такой страницы на сайте — 404.

  3. Alexey

    в общем то, что в скобочках больше-меньше — повырезало)

  4. altesack Автор записи

    @ Alexey:
    То есть создал контроллер, и тут же создал роут?

  5. Alexey

    А их там разве много будет? На модуль роут (иногда два), а контроллеров может и больше быть.
    На модуль user может быть 5-6 контроллеров, 2 роута

Комментарии запрещены.