Динамический маршрут
Правило нахождения контроллера динамического маршрута основывается на иерархии разделов сайта. Разделы сайта хранятся в базе данных и управляются через административную панель. Структура разделов представляет собой дерево: главный раздел сайта является корнем дерева, к которому крепятся подразделы, которые в свою очередь могут иметь свои подразделы. Каждый раздел имеет имя. Адрес раздела складывается из его имени и имени его предков, не считая корневого раздела. Например, дерево разделов:
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/, то он будет обрабатываться в следующей последовательности:
- Проверяем существует ли раздел c адресом: my/blog и что его контроллер не требует дополнительных параметров. Если условие соблюдается, возвращаем контроллер маршрутизатору.
- Далее проверяем наличие раздела с адресом my и соответствие "blog" в качестве параметра. Возвращаем контроллер, если таковой найден.
- Проверяем главный раздел и "my/blog" в качестве параметра. Возвращаем контроллер, если таковой найден.
- Сигнализируем об отсутствии соответствующего контроллера.
Динамический маршрут - это следующий за статическим типом маршрутов, который проверяется маршрутизатором. Название "динамический" дано маршруту, потому что адрес контроллера возможно поменять администратором сайта (через админ панель). Динамические контроллеры в основном обрабатывают страницы, которые непосредственно отображаются пользователю сайта. Например:
- Лента новостей
- Галерея фотографий
- Блог