Иногда модуль в Drupal требует наличия специфических сущностей или конфигураций, например — определённого текстового формата. Поскольку текстовые форматы являются конфигурационными сущностями (entities), напрямую указать их как зависимость в .info.yml
невозможно. Однако в вашем модуле можно реализовать проверку на наличие нужных условий во время установки — с помощью hook_requirements()
.
Использование hook_requirements()
для проверки условий установки
Начиная с поздних версий Drupal 8, hook_requirements()
позволяет задавать пользовательские требования на разных стадиях работы с модулем, включая установку (install
), обновление (update
) и обычную проверку (runtime
).
Вот пример, как сгенерировать ошибку установки модуля, если не найден определённый текстовый формат.
Хук создаётся в файле MODULE.install:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
use Drupal\filter\Entity\FilterFormat; /** * Implements hook_requirements(). */ function MODULE_requirements($phase) { $requirements = []; if ($phase === 'install') { $required_format = 'content_format'; $format = FilterFormat::load($required_format); if (!$format) { $requirements['mymodule_text_format'] = [ 'title' => t('Required text format'), 'value' => t('Missing'), 'description' => t('The required text format "@format" is not available. Please create it before installing this module.', ['@format' => $required_format]), 'severity' => REQUIREMENT_ERROR, ]; } } return $requirements; } |
Как это работает
Гибкость: Можно проверять любые условия — существование ролей, нод, конфигураций и даже внешние API, если нужно.
Фаза установки (install
): Проверка выполняется только при установке модуля.
Отсутствие формата: Если текстовый формат с машинным именем content_format
не найден, выводится ошибка с уровнем REQUIREMENT_ERROR
.
Поведение при установке через Drush
Если модуль устанавливается через Drush, такие ошибки не остановят процесс полностью — система предложит вам выбор: продолжить установку несмотря на проблему или прервать её. Это удобно при работе в окружениях разработки, но требует осторожности на продакшене.
hook_requirements()
— мощный способ обеспечить корректность установки модуля в Drupal. Он позволяет проверять произвольные условия, которые нельзя выразить в .info.yml
, и предупреждать администратора о возможных ошибках на раннем этапе. Такой подход делает модули надёжнее и улучшает поддержку в долгосрочной перспективе.