logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri
03/10/2025, by Ivan

Gli oggetti di configurazione possono dichiarare dipendenze. Una dipendenza può essere un modulo, un tema o una entità.

Le dipendenze di un oggetto di configurazione devono essere installate prima che l’oggetto di configurazione stesso possa essere installato. Se le dipendenze non sono presenti e installate nel sito, l’oggetto di configurazione non potrà essere installato. Un modulo deve dichiarare nel suo file YAML delle informazioni del modulo le dipendenze da moduli e temi richiesti dai suoi oggetti di configurazione.

In generale, gli sviluppatori di moduli non devono preoccuparsi di dichiarare le dipendenze per gli oggetti di configurazione. Estendendo le classi base delle entità di configurazione del core e creando plugin dai fornitori standard dell’API dei plugin, le dipendenze vengono calcolate e dichiarate automaticamente.

Panoramica

Le dipendenze di un oggetto di configurazione vengono dichiarate con la chiave config_dependencies nella definizione dell’oggetto di configurazione. Le chiavi di questo array possono essere:

  • content
  • config
  • module
  • theme

 

Gli oggetti di configurazione definiscono le loro dipendenze implementando \Drupal\Core\Config\Entity\ConfigEntityInterface::calculateDependencies(). Questo metodo deve essere richiamato dall’implementazione dell’oggetto di configurazione in \Drupal\Core\Entity\EntityInterface::preSave(). Le implementazioni devono usare il metodo helper \Drupal\Core\Config\Entity\ConfigEntityBase::addDependency() per aggiungere dipendenze. Tutte le implementazioni nel core richiamano il metodo genitore \Drupal\Core\Config\Entity\ConfigEntityBase::calculateDependencies(), che reimposta le dipendenze e fornisce l’implementazione per determinare i provider dei plugin per gli oggetti di configurazione che implementano \Drupal\Core\Entity\EntityWithPluginCollectionInterface. Vedi la documentazione API del gestore delle dipendenze di configurazione per maggiori dettagli su queste classi e metodi.

Come vengono calcolate le dipendenze di configurazione

Calcolo delle dipendenze basato sulle proprietà dell’oggetto di configurazione

@todo - vedi \Drupal\block\Entity\Block::calculateDependencies

Calcolo delle dipendenze basato su altri oggetti di configurazione

@todo - vedi \Drupal\entity\EntityDisplayBase::calculateDependencies (questo è un esempio piuttosto complesso di ciò)

Calcolo delle dipendenze nei plugin e nelle loro derivate

@todo vedi Drupal\Core\Config\Entity\ConfigEntityBase::calculateDependencies – chiarire che l’oggetto config implementa EntityWithPluginBagInterface, dopo di che verrà automaticamente aggiunta la dipendenza al modulo che fornisce il plugin.

Le definizioni delle derivate dei plugin vengono generate dal plugin base. Ad esempio, \Drupal\system\Plugin\Derivative\SystemMenuBlock è una derivata del plugin \Drupal\system\Plugin\Block\SystemMenuBlock. I blocchi del menu di sistema richiedono che venga stabilita una relazione di dipendenza tra l’oggetto di configurazione del modulo block e l’oggetto di configurazione del menu fornito tramite il blocco.

\Drupal\system\Plugin\Block\SystemMenuBlock implementa il metodo getDerivativeDefinitions(). Pertanto, le derivate dei blocchi di menu, come il blocco del menu footer di Bartik, dipenderanno dalla corrispondente entità \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;
}

Nel codice sopra, a ciascuna derivata di un blocco di menu di sistema viene assegnata una dipendenza di configurazione dall’oggetto che fornisce il menu del blocco. Per ottenere il nome dell’entità da usare per identificare la dipendenza di configurazione, viene chiamato il metodo dell’entità getConfigDependencyName(). Il nome dell’oggetto è una stringa composta e non deve essere codificato staticamente nel punto in cui la dipendenza viene dichiarata.

La proprietà config_dependencies può anche essere dichiarata come parte della definizione del plugin. Tuttavia, le dipendenze degli oggetti di configurazione sono per lo più valori dinamici e vengono quindi calcolate. La dichiarazione di una dipendenza statica nella definizione del plugin è rara e dovrebbe essere evitata.

Dipendenze forzate

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

Consulta Gestione della configurazione in Drupal 8 per maggiori informazioni sull’esportazione e importazione dei file di configurazione.