Модуль управления роутами для MeerkatCMF (on Kohana 3.3)
Модуль предназначен для того, чтобы делать правильный урл
"/news/123/edit/"
"/<controller>/<id>/<action>/"
вместо рекомендуемых дефолтных Kohana
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'welcome',
'action' => 'index',
));
Помните, как это было у Артемия Лебедева: http://www.artlebedev.ru/kovodstvo/sections/48/
Правило: посетитель всегда должен получить осмысленное и предсказуемое содержимое, если он стер часть адреса до ближайшей косой черты.
А что будет, если последовать этому правилу в урл /admin/news/edit/123 ?
Понятно, что надо редактировать, понятно, что новость, но какую?
С использованием же этого модуля все будет логично:
Пример использования
Meerkat\Base\Route::factory('/admin/news')
->controller('News')
->directory('Admin')
->with_item(true)
->put();
Создаст роуты
Действие | URL | Param | Controller:action |
---|---|---|---|
Показать все новости | /admin/news/ | Controller_Admin_News::action_index | |
Показать одну новость | /admin/news/123 | Request::current()->param('id') | Controller_Admin_News::action_item |
Добавить новость | /admin/news/add | Controller_Admin_News::action_add | |
Редактировать новость | /admin/news/123/edit | Request::current()->param('id') | Controller_Admin_News::action_edit |
Удалить новость | /admin/news/123/delete | Request::current()->param('id') | Controller_Admin_News::action_delete |
Meerkat\Base\Route::factory('/admin/news')
->controller('News')
->directory('Admin')
->with_item('([a-z-_0-9]+)')
->put();
Действие | URL | Param | Controller:action |
---|---|---|---|
Показать все новости | /admin/news/ | Controller_Admin_News::action_index | |
Показать одну новость | /admin/news/putin-v-kremle | Request::current()->param('id') | Controller_Admin_News::action_item |
Добавить новость | /admin/news/add | Controller_Admin_News::action_add | |
Редактировать новость | /admin/news/putin-v-kremle/edit | Request::current()->param('id') | Controller_Admin_News::action_edit |
Удалить новость | /admin/news/putin-v-kremle/delete | Request::current()->param('id') | Controller_Admin_News::action_delete |