Задать вопрос

Способы «маршрутизации» страниц в CMS / Framework-ах

Приветствую, all!

Озадачился собрать все подходы, с помощью которых в различных CMS и фремворках, осуществляется разбор урла и определение, какому контроллеру срабатывать.
Навскидку вспоминаются:

0) структура папок — создается нужная структура и в каждый каталог помещается нужный контроллер
1) с реврайтом, использование регулярок статично в коде:
$Router->addRoute("/news/[0-9]+", function($params){  /* */ });

2) то же самое, что и п.1. но загрузка регулярок и имен контроллеров из базы
3) выборка имени контроллера из базы по точному соответствию
$ctrlName = $DB->selectCell("SELECT `ctrlName` FROM `Pages` WHERE `URL` LIKE ?", $_SERVER['REQUEST_URI']);

4) то же самое но с использованием GET-параметра
$ctrlName = $DB->selectCell("SELECT `ctrlName` FROM `Pages` WHERE `ID`=?d", $_GET['page_id']);

5) разбор урла на части в массив
 /pages/news/all/1/ => array('pages', 'news', 'all', '1') 
и выборка из базы этого пути, то есть нечто
$Pages = $DB->select("SELECT * FROM `Pages` WHERE `URL` IN (?a)", array('pages', 'news', 'all', '1')); 
c проверкой иерархии

Подскажите ещё?
  • Вопрос задан
  • 3291 просмотр
Подписаться 9 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
raskumandrin
@raskumandrin
Немного доработанный ваш первый вариант — обёртка регулярных выражений в placeholder'ы (не встречал употребления перевода «заполнители»), с которыми гораздо удобнее работать:
mojolicio.us/perldoc/Mojolicious/Guides/Routing#Routes
Ответ написан
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
в asp.net mvc тоже интересно маршруты пишутся.относительно фактической структуры файлов проекта-
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
Я использую название модуля как первый элемент, а дальше json структура вида:

[
	"latest_posts",
	"section",
	"post",
	"tag",
	"new_post",
	"edit_post",
	"drafts"
]

Если у модуля есть админка/API — перед названием модуля добавляются соответствующие префиксы.
Ответ написан
vshemarov
@vshemarov
Первой части пути УРЛа (напр., в site.com/page это — /page) соответствует одноименный класс с заданным префиксом (напр., ControllerPage), но можно в конфиге сайта назначить любой другой класс. А нужный класс подгружается автозагрузчиком, когда тот дергается.

Внутри класса есть метод-обработчик по умолчанию, но можно с помощью регулярки назначить разные обработчики для разных УРЛов (для site.com/page/add — один, для site.com/page/show/123 — другой и т.д.).

Получается и просто, и гибко
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы