कॉन्फ़िगरेशन स्कीमा/मेटाडेटा
Drupal 8 YAML कॉन्फ़िगरेशन फ़ाइलों के लिए Kwalify (http://www.kuwata-lab.com/kwalify/) का उपयोग करके बनाए गए स्कीमा/मेटाडेटा भाषा का समर्थन करता है। स्वयं Kwalify Ruby में लिखा गया है, और हमें फ़ॉर्मेट में कुछ छोटे समायोजन करने पड़े, इसलिए Kwalify की सभी विवरण सीधे लागू नहीं होते, लेकिन यह काफ़ी नज़दीक है।
Cheatsheet
त्वरित समझ और कुछ उपयोगी उदाहरणों के लिए, इस चीटशीट को देखें, और यदि आपके पास अभी भी प्रश्न हैं, तो आगे पढ़ें:
![]()
/sites/default/files/config-schema-cheat-sheet1.5.pdf
प्रारंभिक उदाहरण
System मॉड्यूल मेंटेनेंस मोड से संबंधित दो कॉन्फ़िगरेशन पैरामीटर रखता है (चाहे साइट को सामान्य आगंतुकों के लिए ऑफ़लाइन किया गया हो या नहीं):
<?php
$config = \Drupal::config('system.maintenance');
$message = $config->get('message');
$langcode = $config->get('langcode');
?>
(यह कि मेंटेनेंस सक्षम है या नहीं, state system में संग्रहीत होता है, न कि कॉन्फ़िगरेशन में।)
इस कॉन्फ़िगरेशन ऑब्जेक्ट के लिए डिफ़ॉल्ट मान core/modules/system/config/install/system.maintenance.yml फ़ाइल में संग्रहीत होते हैं:
message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.' langcode: en
हर मॉड्यूल में आवश्यकतानुसार जितने चाहें कॉन्फ़िगरेशन ऑब्जेक्ट्स हो सकते हैं। यह सभी एक या अधिक स्कीमा फ़ाइलों में वर्णित होते हैं जो मॉड्यूल के साथ आती हैं। System मॉड्यूल के मामले में, फ़ाइलें core/modules/system/config/schema में होती हैं। system.schema.yml फ़ाइल से संबंधित स्कीमा अनुभाग इस प्रकार दिखता है:
system.maintenance:
type: config_object
label: 'Maintenance mode'
mapping:
message:
type: text
label: 'Message to display when in maintenance mode'
फ़ाइल में शीर्ष-स्तरीय key ("system.maintenance") .yml फ़ाइल के बेस नाम ("system.maintenance.yml") और कॉन्फ़िगरेशन ऑब्जेक्ट के नाम (config('system.maintenance')) को संदर्भित करता है। नेस्टेड स्तर यह वर्णन करते हैं कि फ़ाइल में क्या है। कॉन्फ़िगरेशन स्कीमा दो प्रकार की फ़ाइलों को परिभाषित करता है: config_object वैश्विक कॉन्फ़िगरेशन फ़ाइलों के लिए और config_entity entities के लिए। config_object प्रकार core.data_types.schema.yml में इस प्रकार परिभाषित है:
# Root of a configuration object.
_core_config_info:
type: mapping
mapping:
default_config_hash:
type: string
label: 'Default configuration hash'
config_object:
type: mapping
mapping:
langcode:
type: string
label: 'Language code'
_core:
type: _core_config_info
Mapping प्रकार key-value जोड़े के लिए बेसिक प्रकार है। config_object का उपयोग करके, मेंटेनेंस मोड की परिभाषा langcode और _core keys को पुनः उपयोग करती है और संदेश के लिए एक नया key जोड़ती है। system.maintenance की परिभाषा पर वापस आते हुए, schema लेबल label: 'Maintenance mode' schema की सामग्री का वर्णन करता है। फिर वास्तविक तत्व mapping key के तहत सूचीबद्ध होते हैं, जहाँ message key परिभाषित है, और बेस प्रकार से langcode और _core keys प्राप्त करता है। प्रत्येक तत्व का एक type और label key होता है, जो डेटा के प्रकार का वर्णन करता है और डेटा का विवरण देता है। लेबल आमतौर पर कॉन्फ़िगरेशन फ़ॉर्म लेबल जैसा या उससे मिलता-जुलता होता है, जहाँ मान सिस्टम एडमिनिस्ट्रेटर द्वारा संपादित किया जा सकता है।
सभी मामलों में, जिन्हें कोर सपोर्ट करता है, .yml फ़ाइल में शीर्ष-स्तरीय तत्व एक mapping होगा, जिसमें नीचे mapping सूची में वर्णित तत्व होंगे। आपको mapping के दो परिभाषित subtypes config_object या config_entity में से एक का उपयोग करना चाहिए। mapping में व्यक्तिगत तत्व किसी भी प्रकार के हो सकते हैं, इस पर निर्भर करता है कि आपने डेटा को कैसे परिभाषित किया है। स्वयं _core key और _core में सभी keys Drupal core के लिए आरक्षित हैं।
Schema फ़ाइलों का उपयोग किस लिए किया जाता है?
1. Schema फ़ाइलों का मुख्य उपयोग बहुभाषी समर्थन के लिए किया गया था। हमें एक टूल की आवश्यकता है जो सभी अनुवाद योग्य स्ट्रिंग्स की पहचान कर सके, ताकि जब आप अपनी सेटिंग्स, डिफ़ॉल्ट views, अतिरिक्त user roles, मेन्यू items आदि प्रदान करें, तो हम उन्हें आपके मॉड्यूल/थीम रिलीज़ का हिस्सा बनाकर https://localize.drupal.org पर अनुवाद के लिए प्रस्तुत कर सकें। इस उपयोग के लिए nesting और types पर्याप्त हैं।
2. हम schema का उपयोग अनुवाद फ़ॉर्म बनाने के लिए भी करते हैं, जो आपके डेटा के आधार पर कॉन्फ़िगरेशन को अनुवाद योग्य बनाते हैं। इस मामले में, types और labels महत्वपूर्ण हो जाते हैं। बेसिक कॉन्फ़िगरेशन translation मॉड्यूल schema का उपयोग translation forms बनाने और translations को स्टोर करने के लिए करता है। सबसे महत्वपूर्ण built-in translatable types हैं «label» (single-line text input) और «text» (multi-line text input)।
3. Schema में निहित ज्ञान का उपयोग करते हुए, कॉन्फ़िगरेशन ऑब्जेक्ट्स के लिए डिफ़ॉल्ट persistence कार्यान्वयन के लिए schema आवश्यक है ताकि सही properties को उनके परिभाषित प्रकारों के साथ निर्यात किया जा सके। हालाँकि schema प्रदान करना बेहतर है, यदि आप वास्तव में ऐसा नहीं करना चाहते, तो अपनी कॉन्फ़िगरेशन entity के implementation में toArray() मेथड लागू करें।
4. Schema का उपयोग मानों को अपेक्षित प्रकारों से बाँधने के लिए भी किया जाता है। यह सुनिश्चित करता है कि जबकि PHP और वेब फ़ॉर्म सामान्यतः strings को प्राथमिकता देते हैं, कॉन्फ़िगरेशन सेव करते समय सही प्रकार उपयोग किए जाएँ। यह महत्वपूर्ण है ताकि config deployment के अंतर में केवल वास्तविक बदलाव दिखें, न कि प्रकार के आकस्मिक परिवर्तन।
5. PHPUnit TestBase से व्युत्पन्न सभी परीक्षण डिफ़ॉल्ट रूप से सख्त schema अनुपालन सुनिश्चित करते हैं। यदि schema फ़ाइल अनुपस्थित या अमान्य है, तो यह schema errors उत्पन्न करेगा। इसे स्किप किया जा सकता है (हालाँकि अनुशंसित नहीं है) अपने परीक्षण में यह सेट करके:
protected $strictConfigSchema = FALSE;
Schema debugging के लिए देखें https://drupal.org/project/config_inspector। यह मॉड्यूल आपको missing schema और schema items की पहचान करने में मदद करता है।
Schema फ़ाइलें अन्य उपयोगों के लिए भी हो सकती हैं, जैसे कि web services इंटरफेस बनाना। संभवतः और भी उपयोग होंगे, जिनके बारे में लोग समय के साथ जानेंगे।