Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Зависимости объекта конфигурации

01/05/2020, by maria

Объекты конфигурации могут объявлять зависимости. Зависимость может быть модулем, темой или сущностью.

Зависимости объекта конфигурации должны быть установлены до того, как объект конфигурации может быть установлен. Если зависимости отсутствуют и установлены на сайте, объект конфигурации не удастся установить. Модуль должен объявить в своем информационном модуле YAML файл и зависимости темы, которые потребуются его объектам конфигурации.

Как правило, разработчикам модулей не нужно заботиться об объявлении зависимостей для объектов конфигурации. Расширяя базовые классы сущностей конфигурации ядра и создавая плагины из стандартных поставщиков API плагинов, зависимости будут рассчитываться и объявляться автоматически.

Обзор

Зависимости объекта конфигурации объявляются с помощью ключа config_dependencies в определении объекта конфигурации. Ключи этого массива могут быть следующими:

  • content
  • config
  • module
  • theme

 

Объекты конфигурации определяют свои зависимости, реализуя \Drupal\Core\Config\Entity\ConfigEntityInterface::CalculayDependencies(). Этот метод должен вызываться из реализации объекта конфигурации \ Drupal \ Core \ Entity \ EntityInterface :: preSave (). Реализации должны использовать вспомогательный метод \Drupal\Core\Config\Entity\ConfigEntityBase::addDependency() для добавления зависимостей. Все реализации в ядре вызывают родительский метод \Drupal\Core\Config\Entity\ConfigEntityBase::calcDependencies(), который сбрасывает зависимости и предоставляет реализацию для определения поставщиков подключаемых модулей для объектов конфигурации, которые реализуют \Drupal\Core\Entity\EntityWithPluginCollectionInterface. См. Документацию API менеджера зависимостей конфигурации для более подробной информации об этих классах и методах.

Как рассчитываются зависимости конфигурации

Расчет зависимостей на основе свойств объекта конфигурации

@todo - см \Drupal\block\Entity\Block::calculateDependencies

Расчет зависимостей на основе других объектов конфигурации

@todo - см. \Drupal\entity\EntityDisplayBase:: calculateDependencies (это очень сложный пример этого)

Расчет зависимостей в плагинах и их производных

@todo см. Drupal\Core\Config\Entity\ConfigEntityBase::calculateDependencies - уточните тот факт, что объект config реализует EntityWithPluginBagInterface, после чего автоматически добавится зависимость в модуль, предоставляющий плагин.

Определения производных плагинов получены из базового плагина. Например, \Drupal\system\Plugin\Derivative\SystemMenuBlock является производной от плагина \Drupal\system\Plugin\Block\SystemMenuBlock. Блоки системного меню требуют, чтобы была установлена ​​взаимосвязь зависимости между объектом конфигурации блочного модуля и объектом конфигурации меню, предоставляемым через блок.

\Drupal\system\Plugin\Block\SystemMenuBlock реализует метод getDerivativeDefinitions(). Таким образом, производные блоки меню, такие как блок меню нижнего колонтитула Bartik, будут зависеть от соответствующей сущности \Drupal\system\Entity\Menu.

public function getDerivativeDefinitions($base_plugin_definition) {
  foreach ($this->menuStorage->loadMultiple() as $menu => $entity) {
    $this->derivatives[$menu] = $base_plugin_definition;
    $this->derivatives[$menu]['admin_label'] = $entity->label();
    $this->derivatives[$menu]['config_dependencies']['config'] = array($entity->getConfigDependencyName());
  }
  return $this->derivatives;
}

В приведенном выше коде каждой производной блока системного меню назначается зависимость конфигурации объекта, предоставляющего меню блока. Чтобы получить имя сущности, которое следует использовать для идентификации зависимости конфигурации, вызывается метод сущности getConfigDependencyName(). Имя объекта является составной строкой и не должно быть жестко закодировано там, где объявлена зависимость.

Свойство config_dependencies также может быть объявлено как часть определения плагина. Однако зависимости объекта конфигурации в основном являются динамическими значениями и, таким образом, рассчитываются. Объявление статической зависимости в определении плагина ожидается редко, и его следует избегать.

Принудительные зависимости

@todo - см. https://www.drupal.org/node/2404447.

См. Управление конфигурацией в Drupal 8 для получения дополнительной информации об экспорте и импорте файлов конфигурации.

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.