Zavisnosti konfiguracionog objekta
Konfiguracioni objekti mogu da deklarišu zavisnosti. Zavisnost može biti modul, tema ili entitet.
Zavisnosti konfiguracionog objekta moraju biti instalirane pre nego što konfiguracioni objekat može biti instaliran. Ako zavisnosti nisu prisutne i instalirane na sajtu, konfiguracioni objekat neće moći biti instaliran. Modul treba da deklariše u svom YAML fajlu sa informacijama o modulu i zavisnosti tema koje će njegovi konfiguracioni objekti zahtevati.
Uopšteno, programeri modula ne moraju da brinu o deklarišanju zavisnosti za konfiguracione objekte. Proširujući osnovne klase konfiguracionih entiteta iz jezgra i praveći dodatke koristeći standardne dobavljače API plugina, zavisnosti će biti izračunate i deklarisane automatski.
Pregled
Zavisnosti konfiguracionog objekta se deklarišu pomoću ključa config_dependencies
u definiciji konfiguracionog objekta. Ključevi ovog niza mogu biti sledeći:
- content
- config
- module
- theme
Konfiguracioni objekti definišu svoje zavisnosti implementirajući \Drupal\Core\Config\Entity\ConfigEntityInterface::calculateDependencies(). Ova metoda treba biti pozvana iz implementacije konfiguracionog objekta \Drupal\Core\Entity\EntityInterface::preSave(). Implementacije bi trebalo da koriste pomoćnu metodu \Drupal\Core\Config\Entity\ConfigEntityBase::addDependency() za dodavanje zavisnosti. Sve implementacije u jezgru pozivaju roditeljsku metodu \Drupal\Core\Config\Entity\ConfigEntityBase::calcDependencies(), koja resetuje zavisnosti i pruža implementaciju za određivanje dobavljača modula plugina za konfiguracione objekte koji implementiraju \Drupal\Core\Entity\EntityWithPluginCollectionInterface. Pogledajte API dokumentaciju menadžera zavisnosti konfiguracije za detaljnije informacije o ovim klasama i metodama.
Kako se računaju zavisnosti konfiguracije
Računanje zavisnosti na osnovu svojstava konfiguracionog objekta
@todo - pogledajte \Drupal\block\Entity\Block::calculateDependencies
Računanje zavisnosti na osnovu drugih konfiguracionih objekata
@todo - pogledajte \Drupal\entity\EntityDisplayBase::calculateDependencies (ovo je vrlo složen primer)
Računanje zavisnosti u pluginovima i njihovim izvedenicama
@todo pogledajte Drupal\Core\Config\Entity\ConfigEntityBase::calculateDependencies - imajte u vidu da objekat config implementira EntityWithPluginBagInterface, nakon čega se automatski dodaje zavisnost na modul koji obezbeđuje plugin.
Definicije izvedenih plugina se dobijaju iz osnovnog plugina. Na primer, \Drupal\system\Plugin\Derivative\SystemMenuBlock je izveden iz plugina \Drupal\system\Plugin\Block\SystemMenuBlock. Sistem blokova menija zahteva uspostavljanje veze zavisnosti između konfiguracionog objekta blok modula i konfiguracionog objekta menija koji obezbeđuje blok.
\Drupal\system\Plugin\Block\SystemMenuBlock implementira metodu getDerivativeDefinitions(). Dakle, izvedeni blokovi menija, poput bloka menija za podnožje Bartik teme, zavise od odgovarajućeg entiteta \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; }
U gornjem kodu, svaka izvedena instanca sistemskog menija dobija zavisnost konfiguracionog objekta koji obezbeđuje meni bloka. Da bi se dobilo ime entiteta koje treba koristiti za identifikaciju zavisnosti konfiguracije, poziva se metoda entiteta getConfigDependencyName(). Ime objekta je složeni string i ne bi trebalo da bude hardkodirano tamo gde se deklariše zavisnost.
Svojstvo config_dependencies
takođe može biti deklarisano kao deo definicije plugina. Međutim, zavisnosti konfiguracionog objekta su uglavnom dinamičke vrednosti i stoga se računaju. Deklaracija statičke zavisnosti u definiciji plugina je retka i treba je izbegavati.
Primorane zavisnosti
@todo - pogledajte https://www.drupal.org/node/2404447.
Pogledajte Upravljanje konfiguracijom u Drupalu 8 za dodatne informacije o izvozima i uvozima konfiguracionih fajlova.
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.