logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

Abhängigkeiten des Konfigurationsobjekts

19/06/2025, by Ivan

Konfigurationsobjekte können Abhängigkeiten deklarieren. Eine Abhängigkeit kann ein Modul, ein Theme oder eine Entity sein.

Abhängigkeiten eines Konfigurationsobjekts müssen vorhanden sein, bevor das Konfigurationsobjekt installiert werden kann. Wenn die Abhängigkeiten nicht vorhanden oder auf der Website nicht installiert sind, schlägt die Installation des Konfigurationsobjekts fehl. Das Modul muss in seiner Info-YAML-Datei und in den Theme-Abhängigkeiten die erforderlichen Abhängigkeiten für seine Konfigurationsobjekte angeben.

Im Allgemeinen müssen Modulentwickler sich nicht explizit um die Deklaration von Abhängigkeiten für Konfigurationsobjekte kümmern. Indem sie die Basisklassen der Core-Konfigurationsentities erweitern und Plugins von den Standard-Plugin-API-Anbietern erstellen, werden die Abhängigkeiten automatisch berechnet und deklariert.

Überblick

Abhängigkeiten von Konfigurationsobjekten werden über den Schlüssel config_dependencies in der Definition des Konfigurationsobjekts deklariert. Die Schlüssel dieses Arrays können folgende sein:

  • content
  • config
  • module
  • theme

 

Konfigurationsobjekte definieren ihre Abhängigkeiten, indem sie \Drupal\Core\Config\Entity\ConfigEntityInterface::calculateDependencies() implementieren. Diese Methode wird von der Implementierung der Methode \Drupal\Core\Entity\EntityInterface::preSave() des Konfigurationsobjekts aufgerufen. Implementierungen sollten die Hilfsmethode \Drupal\Core\Config\Entity\ConfigEntityBase::addDependency() verwenden, um Abhängigkeiten hinzuzufügen. Alle Implementierungen im Core rufen die Elternmethode \Drupal\Core\Config\Entity\ConfigEntityBase::calcDependencies() auf, die die Abhängigkeiten zurücksetzt und eine Implementierung zum Ermitteln der Anbieter der installierten Module für Konfigurationsobjekte bietet, die \Drupal\Core\Entity\EntityWithPluginCollectionInterface implementieren. Siehe die API-Dokumentation des ConfigDependencyManager für weitere Informationen zu diesen Klassen und Methoden.

Wie Abhängigkeiten berechnet werden

Berechnung von Abhängigkeiten basierend auf Eigenschaften des Konfigurationsobjekts

@todo – siehe \Drupal\block\Entity\Block::calculateDependencies

Berechnung von Abhängigkeiten basierend auf anderen Konfigurationsobjekten

@todo – siehe \Drupal\entity\EntityDisplayBase::calculateDependencies (dies ist ein sehr komplexes Beispiel dafür)

Berechnung von Abhängigkeiten in Plugins und deren Derivaten

@todo siehe Drupal\Core\Config\Entity\ConfigEntityBase::calculateDependencies – erläutern Sie, dass das Config-Objekt das Interface EntityWithPluginBagInterface implementiert und dadurch automatisch eine Modulabhängigkeit für das Plugin hinzugefügt wird.

Definitionen von Plugin-Derivaten stammen vom Basiskomponenten-Plugin. Zum Beispiel ist \Drupal\system\Plugin\Derivative\SystemMenuBlock ein Derivat des Plugins \Drupal\system\Plugin\Block\SystemMenuBlock. Systemmenü-Blöcke benötigen, dass eine Abhängigkeitsbeziehung zwischen dem Konfigurationsobjekt des Blockmoduls und dem durch den Block bereitgestellten Menü-Konfigurationsobjekt besteht.

\Drupal\system\Plugin\Block\SystemMenuBlock implementiert die Methode getDerivativeDefinitions(). Dadurch erhalten abgeleitete Menüblöcke, wie der Footer-Menüblock von Bartik, eine Abhängigkeit von der entsprechenden Entity \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;
}

Im obigen Code erhält jeder abgeleitete Systemmenüblock eine Konfigurationsabhängigkeit auf das Block-Menüobjekt. Um den Namen der Entity zu erhalten, der zur Identifikation der Konfigurationsabhängigkeit verwendet wird, wird die Methode getConfigDependencyName() der Entity aufgerufen. Der Objektname ist ein zusammengesetzter String und sollte nicht hartkodiert dort stehen, wo die Abhängigkeit deklariert wird.

Das Property config_dependencies kann auch als Teil der Plugin-Definition deklariert werden. Allerdings sind Konfigurationsabhängigkeiten hauptsächlich dynamische Werte und werden somit berechnet. Die statische Deklaration einer Abhängigkeit in der Plugin-Definition ist selten und sollte vermieden werden.

Erzwungene Abhängigkeiten

@todo – siehe https://www.drupal.org/node/2404447.

Weitere Informationen zum Export und Import von Konfigurationsdateien finden Sie unter Konfigurationsverwaltung in 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.