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

Таблица registry

Таблица registry представляет собой реестр (или регистр), который хранит mapping между именами классов/интерфейсов и физическими файлами, в которых они находятся. Этот механизм критически важен для работы автозагрузки PSR-0/PSR-4 в Drupal, заменяя более медленную автозагрузку на основе include_once.

Поля

Поле Тип данных Описание
name varchar(255) Полное имя класса, интерфейса или трейта (например, Drupal\Core\Database\Connection). Это первичный ключ таблицы.
type varchar(9) Тип записи. Может принимать значения: class, interface или trait.
filename varchar(255) Абсолютный путь к файлу, в котором находится объявление данного класса, интерфейса или трейта (например, /path/to/drupal/core/lib/Drupal/Core/Database/Connection.php).
module varchar(255) Имя модуля, которому принадлежит файл. Для классов ядра Drupal значение равно core или пустой строке.
weight int Вес, используемый для порядка загрузки. Меньшее число означает более высокий приоритет. Обычно имеет значение 0.

Как это работает

При первой установке Drupal или после очистки кеша (drush cr) система запускает процесс перестроения реестра. При этом сканируются все файлы в папках core/, modules/, themes/ и profiles/ в поиске классов, интерфейсов и трейтов.

Для каждого найденного элемента в таблицу registry добавляется запись, связывающая его полное имя с путем к файлу. Когда в коде встречается оператор new или используется имя класса, которое еще не было загружено, автозагрузчик обращается к этой таблице, чтобы найти и включить соответствующий файл.

Использование базы данных для хранения этой информации значительно ускоряет процесс автозагрузки по сравнению с поиском по файловой системе при каждом запросе. Таблица registry является одной из самых часто читаемых таблиц в Drupal.

Поле module помогает системе определить, к какому модулю принадлежит класс. Это используется, например, при обновлении модуля - соответствующие записи в реестре могут быть удалены и пересозданы.

Пример SQL-запроса

Найти все классы, предоставляемые модулем node:

SELECT name, filename FROM registry WHERE module = 'node' AND type = 'class' ORDER BY name;

Проверить, зарегистрирован ли конкретный класс в системе:

SELECT filename, module FROM registry WHERE name = 'Drupal\node\Entity\Node';

Смотрите также

  • таблицу cache_container,
    которая хранит скомпилированный DI-контейнер
  • таблицу key_value,
    которая используется для хранения произвольных ключ-значение данных
  • таблицу cache_bootstrap,
    которая кеширует критически важные для загрузки данные
  • таблицу system,
    которая хранит информацию о модулях, темах и профилях
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить