Таблица router
Таблица router является фундаментальной частью системы маршрутизации Drupal. Она хранит карту путей (URL) на сайте и определяет, какой контроллер (callback-функция) должен быть вызван для обработки запроса к этому пути, а также какие требования (например, права доступа) должны быть при этом удовлетворены.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
name |
varchar(255) |
Первичный ключ. Уникальное машинное имя маршрута. Используется для идентификации маршрута в системе (например, user.login). |
path |
varchar(255) |
Путь (pattern) URL, для которого действует данный маршрут. Может содержать динамические части (placeholders), обозначаемые символом % (например, user/%).
|
pattern_outline |
varchar(255) |
Нормализованная версия пути path, где все динамические части заменены на символ %. Используется для быстрого поиска подходящего маршрута.
|
fit |
int
| Числовой показатель, определяющий, насколько точно маршрут соответствует запрошенному пути. Используется для выбора наиболее подходящего маршрута из нескольких кандидатов. Чем выше значение, тем точнее совпадение. |
route |
longblob |
Сериализованный массив (PHP serialize()), содержащий всю информацию о маршруте: page callback (функция для отображения содержимого), page arguments (аргументы для callback-функции), access callback (функция проверки доступа), access arguments (аргументы для access callback), title, и другие свойства. |
number_parts |
smallint |
Количество частей в пути path, разделенных символом /. Нужно для оптимизации процесса сопоставления маршрутов.
|
Как это работает
Когда пользователь запрашивает страницу на сайте Drupal (например, /node/5), система маршрутизации ищет в таблице router запись, путь path которой наилучшим образом соответствует запрошенному URL. Для пути node/5 будет найден маршрут с path = node/%.
После нахождения подходящей записи массив данных из поля route десериализуется. Drupal проверяет, имеет ли пользователь доступ к данной странице, выполняя функцию, указанную в access callback. Если доступ разрешен, система выполняет основную функцию-обработчик (page callback), которая возвращает содержимое страницы.
Информация в этой таблице собирается и кэшируется при очистке кэша (drush cr) или при установке/включении новых модулей. Модули реализуют hook_menu() или (в более поздних версиях Drupal) предоставляют маршруты в файлах MODULE.routing.yml, которые затем компилируются и сохраняются в таблице router для повышения производительности.
Поле pattern_outline и значение fit критически важны для алгоритма сопоставления. Например, для пути user/1/edit маршрут user/%/edit (pattern_outline = user/%/edit) будет иметь более высокий fit, чем общий маршрут user/% (pattern_outline = user/%), и поэтому будет выбран первым.
Пример SQL-запроса
Посмотреть список всех зарегистрированных маршрутов можно запросом:
SELECT name, path, number_parts
FROM router
ORDER BY number_parts DESC, fit DESC;
Чтобы увидеть детали конкретного маршрута, потребуется десериализовать поле route:
SELECT name, path, route
FROM router
WHERE name = 'user.page';
Смотрите также
-
таблицу
menu_router,
которая является алиасом или предыдущим названием для данной таблицы -
таблицу
menu_links,
которая хранит ссылки меню на сайте -
таблицу
url_alias,
которая хранит псевдонимы (человекочитаемые URL) для системных путей -
таблицу
cache_router,
которая хранит кэшированные данные маршрутизации для повышения производительности