logo

Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll
19/06/2025, by Ivan

Los objetos de configuración pueden declarar dependencias. Una dependencia puede ser un módulo, un tema o una entidad.

Las dependencias de un objeto de configuración deben estar instaladas antes de que el objeto de configuración pueda ser instalado. Si faltan dependencias y no están instaladas en el sitio, el objeto de configuración no podrá instalarse. Un módulo debe declarar en su archivo YAML de información del módulo y en el tema las dependencias que requerirán sus objetos de configuración.

Generalmente, los desarrolladores de módulos no necesitan preocuparse por declarar dependencias para los objetos de configuración. Al extender las clases base de entidades de configuración del núcleo y crear plugins a partir de los proveedores estándar de la API de plugins, las dependencias se calcularán y declararán automáticamente.

Resumen

Las dependencias de un objeto de configuración se declaran mediante la clave config_dependencies en la definición del objeto de configuración. Las claves de este arreglo pueden ser las siguientes:

  • content
  • config
  • module
  • theme

Los objetos de configuración definen sus dependencias implementando \Drupal\Core\Config\Entity\ConfigEntityInterface::calculateDependencies(). Este método debe ser llamado desde la implementación del objeto de configuración de \Drupal\Core\Entity\EntityInterface::preSave(). Las implementaciones deben usar el método auxiliar \Drupal\Core\Config\Entity\ConfigEntityBase::addDependency() para añadir dependencias. Todas las implementaciones en el núcleo llaman al método padre \Drupal\Core\Config\Entity\ConfigEntityBase::calcDependencies(), que reinicia las dependencias y proporciona la implementación para determinar los proveedores de módulos instalables para objetos de configuración que implementan \Drupal\Core\Entity\EntityWithPluginCollectionInterface. Vea la documentación del API del administrador de dependencias de configuración para más información sobre estas clases y métodos.

Cómo se calculan las dependencias de configuración

Cálculo de dependencias basado en las propiedades del objeto de configuración

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

Cálculo de dependencias basado en otros objetos de configuración

@todo - ver \Drupal\entity\EntityDisplayBase::calculateDependencies (este es un ejemplo muy complejo de esto)

Cálculo de dependencias en plugins y sus derivados

@todo ver Drupal\Core\Config\Entity\ConfigEntityBase::calculateDependencies — note que el objeto config implementa EntityWithPluginBagInterface, tras lo cual automáticamente se añade una dependencia al módulo que provee el plugin.

Las definiciones de plugins derivados se obtienen del plugin base. Por ejemplo, \Drupal\system\Plugin\Derivative\SystemMenuBlock es un derivado del plugin \Drupal\system\Plugin\Block\SystemMenuBlock. Los bloques del menú del sistema requieren que exista una relación de dependencia entre el objeto de configuración del módulo del bloque y el objeto de configuración del menú que se provee a través del bloque.

\Drupal\system\Plugin\Block\SystemMenuBlock implementa el método getDerivativeDefinitions(). Así, los bloques derivados del menú, como el bloque del menú de pie de página de Bartik, dependerán de la entidad correspondiente \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;
}

En el código anterior, a cada derivado del bloque del menú del sistema se le asigna una dependencia de configuración del objeto que provee el menú del bloque. Para obtener el nombre de la entidad que se debe usar para identificar la dependencia de configuración, se llama al método getConfigDependencyName() de la entidad. El nombre del objeto es una cadena compuesta y no debe estar codificada directamente donde se declara la dependencia.

La propiedad config_dependencies también puede declararse como parte de la definición del plugin. Sin embargo, las dependencias del objeto de configuración son principalmente valores dinámicos y, por lo tanto, se calculan. La declaración de una dependencia estática en la definición del plugin se espera raramente y debe evitarse.

Dependencias forzadas

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

Vea Administración de configuración en Drupal 8 para más información sobre la exportación e importación de archivos de configuración.

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.