Kohana для чайников. Простейший роутинг

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

Например пишете вы простой сайт-визитку. В нем будет-то всего 5-7 страниц. Первое что приходит в голову — создать контроллер (например article), в котором написать функцию (например get), которая в качестве аргумента будет получать ID статьи и отображать её.
В итоге полный URL статей будет выглядеть примерно так:

http://мойсайт/article/get/1
http://мойсайт/article/get/2

http://мойсайт/article/get/N

Понятно что вместо числового ID можно указывать некий строковый идентификатор, но это не так важно

Но ведь у сайта страниц всего ничего, и все они вызываются этим контроллером. Складывается ощущение, что указание контроллера и метода — лишнее. Хочется видеть URL по-проще например:

http://мойсайт/about
http://мойсайт/contacts
http://мойсайт/news
http://мойсайт/product

И так далее

Можно конечно тупо написать отдельный контроллер под каждый случай. Можно даже каждый такой контроллер наслодовать от некоего главного, но это всё равно приводит к созданию лишних сущностей, а это плохо.

Так вот! Такая задача в Kohana стандартно решается с помощью роутинга. Для начала мы должны на бумаге чётко расписать, какие переадресации мы хотим.

Например мы хотим при вызове URL http://мойсайт/about
вызывался http://мойсайт/article/get/1

Реализация в Kohana3
———————————————
Заходим в application/bootstrap.php
И добавляем свой роутинг

// Мои роуты
Route::set('my_route_about', 'about')
	->defaults(array(
		'controller' => 'article',
		'action'     => 'get',
		'id'     => '1',
	));

где

  • my_route_about — это название роутинга,
  • about — URI до роутинга
  • article, get, 1 — контроллер, функция и аргумент после роутинга.

Это простейшее правило для роутинга. Таких правил можно добавить несколько, по одному для каждого случая.

Правила могут быть сложнее, могут содержать регулярные выражения. Правила могут охватывать больше или меньше вариантов URI. Кстати правила могут пересекаться, и то правило актуальнее, которое окажется ближе к началу. Поэтому рекомендуется более частные правила ставить в начале, а более общие ближе к концу. Говоря о нашем примере нужно как раз заметить, что правило default, нужно поставить после нашего правила.

Реализация в Kohana2
———————————————
Начиная с этого поста я прекращаю детально разбирать примеры для Kohana2. Это связано с тем что я окончательно для себя выбрал Ko3.

По Kohana2 роутинг можно изучить по этому мануалу: http://docs.kohanaphp.com/general/routing . Читабельно, понятно. Но сам не пробовал.

Kohana для чайников. Простейший роутинг: 4 комментария

  1. Nayjest

    Имхо: самый правильный роутинг в MVC веб-приложениях — регулярные выражения

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

    @ Nayjest:
    Согласен. Единственный недостаток регулярок в том, что они сложны.
    По крайней мере для меня :)

  3. тёма

    Спасибо огромное за вашу серию статеек!!!Полноценный блог(интернет магазин? :) ) туториал будет? Его так не хватает нашим(да и буржуйским) интернетам :)
    А как реализовать роутинг для каждой еденицы контента?Например как сделано в большинстве современных cms, для каждой еденицы контента прописывается свой пермалинк. Понимаю что в базе хранится ссылка на контроллер и пермалинк(так в магенто) или просто проверяется сам uri(так в вордпрессе), но меня сбивает с толку что вы прописали роутинг в конфигурационный файл.

  4. Mylistryx

    @ тёма:
    Я бы сделал роут на /articles/* где был бы контроллер с одним методом index. В этот метод передавал бы все, что передается после /articles/, т.е. http://HOST/articles/васяпупкинсупергерой.htm Вызывало бы Controller_My->index() с параметром $url = васяпупкинсупергерой.htm. Ну а дальше я думаю все не так сложно!
    З.Ы, Придумал только что )

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