कॉन्फ़िगरेशन ऑब्जेक्ट की निर्भरताएँ
कॉन्फ़िगरेशन ऑब्जेक्ट्स निर्भरताएँ घोषित कर सकते हैं। निर्भरता एक मॉड्यूल, थीम या एंटिटी हो सकती है।
कॉन्फ़िगरेशन ऑब्जेक्ट की निर्भरताएँ उस समय तक स्थापित होनी चाहिए जब तक कि कॉन्फ़िगरेशन ऑब्जेक्ट इंस्टॉल नहीं हो सकता। यदि निर्भरताएँ अनुपस्थित हैं और साइट पर इंस्टॉल नहीं हैं, तो कॉन्फ़िगरेशन ऑब्जेक्ट इंस्टॉल नहीं हो पाएगा। मॉड्यूल को अपनी जानकारी वाले YAML फ़ाइल में अपने कॉन्फ़िगरेशन ऑब्जेक्ट्स के लिए आवश्यक मॉड्यूल और थीम निर्भरताएँ घोषित करनी चाहिए।
आमतौर पर, मॉड्यूल डेवलपर्स को कॉन्फ़िगरेशन ऑब्जेक्ट्स के लिए निर्भरताएँ घोषित करने की चिंता करने की आवश्यकता नहीं होती। कोर कॉन्फ़िगरेशन एंटिटी बेस क्लासेस को एक्सटेंड करके और मानक प्लगइन API प्रोवाइडर्स से प्लगइन्स बनाकर, निर्भरताएँ स्वचालित रूप से गणना और घोषित की जाएँगी।
सारांश
कॉन्फ़िगरेशन ऑब्जेक्ट की निर्भरताएँ कॉन्फ़िगरेशन ऑब्जेक्ट की परिभाषा में config_dependencies key का उपयोग करके घोषित की जाती हैं। इस array की keys निम्नलिखित हो सकती हैं:
- content
- config
- module
- theme
कॉन्फ़िगरेशन ऑब्जेक्ट्स अपनी निर्भरताओं को \Drupal\Core\Config\Entity\ConfigEntityInterface::calculateDependencies() को लागू करके परिभाषित करते हैं। इस मेथड को \Drupal\Core\Entity\EntityInterface::preSave() के कॉन्फ़िगरेशन ऑब्जेक्ट के कार्यान्वयन से कॉल किया जाना चाहिए। कार्यान्वयन को \Drupal\Core\Config\Entity\ConfigEntityBase::addDependency() हेल्पर मेथड का उपयोग निर्भरताएँ जोड़ने के लिए करना चाहिए। कोर में सभी कार्यान्वयन \Drupal\Core\Config\Entity\ConfigEntityBase::calculateDependencies() पैरेंट मेथड को कॉल करते हैं, जो निर्भरताओं को reset करता है और उन कॉन्फ़िगरेशन ऑब्जेक्ट्स के लिए प्लगइन प्रोवाइडर की पहचान करता है जो \Drupal\Core\Entity\EntityWithPluginCollectionInterface को लागू करते हैं। अधिक जानकारी के लिए देखें Config Dependency Manager API दस्तावेज़।
कॉन्फ़िगरेशन निर्भरताएँ कैसे गणना की जाती हैं
कॉन्फ़िगरेशन ऑब्जेक्ट की properties पर आधारित निर्भरता की गणना
@todo - देखें \Drupal\block\Entity\Block::calculateDependencies
अन्य कॉन्फ़िगरेशन ऑब्जेक्ट्स पर आधारित निर्भरता की गणना
@todo - देखें \Drupal\entity\EntityDisplayBase::calculateDependencies (यह इसका एक बहुत जटिल उदाहरण है)
प्लगइन्स और उनकी derivatives में निर्भरता की गणना
@todo देखें Drupal\Core\Config\Entity\ConfigEntityBase::calculateDependencies – यह स्पष्ट करने के लिए कि जब config ऑब्जेक्ट EntityWithPluginBagInterface को लागू करता है, तो उस प्लगइन को प्रदान करने वाले मॉड्यूल पर स्वतः निर्भरता जुड़ जाती है।
Derivative plugins की परिभाषाएँ बेस प्लगइन से प्राप्त होती हैं। उदाहरण के लिए, \Drupal\system\Plugin\Derivative\SystemMenuBlock SystemMenuBlock प्लगइन (\Drupal\system\Plugin\Block\SystemMenuBlock) की derivative है। सिस्टम मेन्यू ब्लॉक्स को ब्लॉक मॉड्यूल कॉन्फ़िगरेशन ऑब्जेक्ट और उस मेन्यू कॉन्फ़िगरेशन ऑब्जेक्ट के बीच निर्भरता की आवश्यकता होती है जिसे ब्लॉक के माध्यम से प्रदान किया जाता है।
\Drupal\system\Plugin\Block\SystemMenuBlock मेथड getDerivativeDefinitions() को लागू करता है। इस प्रकार, मेन्यू derivatives ब्लॉक्स जैसे Bartik का footer मेन्यू ब्लॉक, संबंधित \Drupal\system\Entity\Menu entity पर निर्भर होंगे।
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;
}
ऊपर दिए गए कोड में प्रत्येक सिस्टम मेन्यू ब्लॉक derivative को उस मेन्यू entity के कॉन्फ़िगरेशन ऑब्जेक्ट की निर्भरता दी जाती है जो ब्लॉक को प्रदान करता है। निर्भरता कॉन्फ़िगरेशन की पहचान करने के लिए entity मेथड getConfigDependencyName() को कॉल किया जाता है। ऑब्जेक्ट का नाम एक संयुक्त string होता है और जहाँ निर्भरता घोषित की जाती है, वहाँ इसे हार्ड-कोड नहीं किया जाना चाहिए।
config_dependencies प्रॉपर्टी को प्लगइन परिभाषा के हिस्से के रूप में भी घोषित किया जा सकता है। हालाँकि, कॉन्फ़िगरेशन ऑब्जेक्ट निर्भरताएँ मुख्य रूप से dynamic मान होती हैं और इसलिए गणना की जाती हैं। प्लगइन परिभाषा में static निर्भरता की घोषणा दुर्लभ है और इससे बचना चाहिए।
फोर्स्ड निर्भरताएँ
@todo - देखें https://www.drupal.org/node/2404447.
कॉन्फ़िगरेशन फ़ाइलों को export और import करने के बारे में अधिक जानकारी के लिए देखें Drupal 8 में कॉन्फ़िगरेशन प्रबंधन।