НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
83 of 182 menu

Таблица 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,
    которая хранит кэшированные данные маршрутизации для повышения производительности
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить