Динамический маршрут

Правило нахождения контроллера динамического маршрута основывается на иерархии разделов сайта. Разделы сайта хранятся в базе данных и управляются через административную панель. Структура разделов представляет собой дерево: главный раздел сайта является корнем дерева, к которому крепятся подразделы, которые в свою очередь могут иметь свои подразделы. Каждый раздел имеет имя. Адрес раздела складывается из его имени и имени его предков, не считая корневого раздела. Например, дерево разделов:

home
\- my
| \- blog
| |- pictures
| |- contacts
|
|- feedback
|- sitemap

Адрес раздела blog - будет "my/blog". Для каждого раздела определен его контроллер. Все контроллеры находятся в папке ./handlers/dynamic/. Правило маршрутизации динамичных контроллеров схоже со статическими контроллерами, с той разницей, что ведется поиск раздела, а затем у раздела определяется его контроллер.

  • Адресом главного раздела является пустая строка (НЕ home).
  • Параметрами контроллера назовем часть пути, которую контроллер использует для уточнения ресурса. Например, контроллер раздела my/blog может принимать параметры вида "id/[0-9]+" для обозначения номера ресурса, тогда URL ресурса будет вида: http://example.com/my/blog/id/99/, что может означать - "показать запись номер 99 из моего блога", при этом "id/99" - будет параметром.
  • Контроллер соответствует запросу, если его адрес раздела и тип параметров контроллера совпадает с запросом. Если контроллер не требует никаких параметров, то запрос должен совпадать с адресом.
  • Поиск раздела осуществляется в порядке от более длинного адреса к менее длинному, т.е. сначала будет проверяться раздел my/blog а уж в конце home

Если задан путь вида: http://www.example.com/my/blog/, то он будет обрабатываться в следующей последовательности:

  1. Проверяем существует ли раздел c адресом: my/blog и что его контроллер не требует дополнительных параметров. Если условие соблюдается, возвращаем контроллер маршрутизатору.
  2. Далее проверяем наличие раздела с адресом my и соответствие "blog" в качестве параметра. Возвращаем контроллер, если таковой найден.
  3. Проверяем главный раздел и "my/blog" в качестве параметра. Возвращаем контроллер, если таковой найден.
  4. Сигнализируем об отсутствии соответствующего контроллера.

Динамический маршрут - это следующий за статическим типом маршрутов, который проверяется маршрутизатором. Название "динамический" дано маршруту, потому что адрес контроллера возможно поменять администратором сайта (через админ панель). Динамические контроллеры в основном обрабатывают страницы, которые непосредственно отображаются пользователю сайта. Например:

  • Лента новостей
  • Галерея фотографий
  • Блог