Drupal 8 में अपनी स्वयं की कॉन्फ़िगरेशन को परिभाषित करना और उपयोग करना
मुख्य विषय: अपनी स्वयं की कॉन्फ़िगरेशन को परिभाषित करना
आप अपने मॉड्यूल में डिफ़ॉल्ट कॉन्फ़िगरेशन शामिल कर सकते हैं, जो अन्य मॉड्यूल्स की कार्यक्षमता पर आधारित हो (कंटेंट टाइप्स, Views, फ़ील्ड्स, टेक्स्ट फ़ॉर्मेट्स आदि)।
उदाहरण के लिए, Node मॉड्यूल एक कंटेंट टाइप कॉन्फ़िगरेशन प्रदान करता है, इसलिए अपने मॉड्यूल में आप एक डिफ़ॉल्ट कंटेंट टाइप कॉन्फ़िगरेशन परिभाषित कर सकते हैं, जो आपके मॉड्यूल के साथ आएगा।
आप अपने स्वयं के प्लगइन्स, entities और सेटिंग्स के लिए कॉन्फ़िगरेशन परिभाषित करना चाह सकते हैं, जिन्हें आगे अन्य मॉड्यूल्स भी उपयोग कर सकते हैं, जैसे आप Node कंटेंट टाइप की कॉन्फ़िगरेशन का उपयोग करते हैं। Drupal 8 आपकी कॉन्फ़िगरेशन को परिभाषित करना आसान बनाता है।
कॉन्फ़िगरेशन फ़ाइल
आपके मॉड्यूल की कॉन्फ़िगरेशन फ़ाइलें, आपके मॉड्यूल के config/install सबडायरेक्टरी में रखी जाती हैं। उदाहरण: यदि आपका मॉड्यूल /modules/example में है, तो पथ होगा /modules/example/config/install/example.settings.yml। आप अपनी कॉन्फ़िगरेशन फ़ाइलें YAML फ़ॉर्मेट में यहाँ रख सकते हैं।
हालाँकि यह अनिवार्य नहीं है, लेकिन यह दृढ़ता से अनुशंसा की जाती है कि आप कॉन्फ़िगरेशन फ़ाइलों को अपने मॉड्यूल के नाम से प्रीफ़िक्स करें: जैसे example.settings.yml। settings.yml या system.settings.yml जैसे नाम न रखें, क्योंकि यह अन्य जगहों की फ़ाइलों से टकरा सकता है। यदि आप इस कन्वेंशन का पालन नहीं करेंगे, तो Drush कमांड्स जैसे drush config:import भ्रमित हो सकते हैं।
यह आपको अन्य घटकों के लिए कॉन्फ़िगरेशन प्रदान करने की भी अनुमति देता है, उदाहरण के लिए, कंटेंट टाइप की डिफ़ॉल्ट कॉन्फ़िगरेशन शामिल करना, जहाँ कॉन्फ़िगरेशन फ़ाइल node.type.example_mytype.yml होगी।
कॉन्फ़िगरेशन फ़ाइल का नाम (बिना .yml एक्सटेंशन के) ही सिस्टम में कॉन्फ़िगरेशन का नाम होता है, और PHP API से आप उसी नाम का उपयोग करके अपनी कॉन्फ़िगरेशन एक्सेस कर सकते हैं।
कॉन्फ़िगरेशन फ़ाइल की संरचना
कॉन्फ़िगरेशन फ़ाइल YAML फ़ॉर्मेट में होनी चाहिए। आप अपनी आवश्यकता के अनुसार इसकी संरचना बना सकते हैं। उदाहरण के लिए, यदि आपको अपने पेज कंट्रोलर से कुछ विशेष आउटपुट के लिए पैरामीटर चाहिए, तो फ़ाइल इस तरह दिख सकती है:
message: 'Hello' langcode: 'en'
अनुशंसा की जाती है कि आप फ़ाइल में langcode कुंजी शामिल करें। यह भाषा प्रणाली द्वारा उपयोग किया जाता है ताकि अनुवाद योग्य टेक्स्ट प्रदान किया जा सके। langcode केवल इसी उद्देश्य के लिए आरक्षित है।
कॉन्फ़िगरेशन अनुवाद करने के लिए Configuration Translation Module सक्षम होना चाहिए।
कॉन्फ़िगरेशन को अनुवाद योग्य बनाने के लिए, आपको दो और फ़ाइलें जोड़नी होंगी:
- /modules/example/config/schema/example.schema.yml
- /modules/example/example.config_translation.yml
पहली फ़ाइल आपकी कस्टम कॉन्फ़िगरेशन की स्कीमा को परिभाषित करती है। उदाहरण:
# /modules/example/config/schema/example.schema.yml
example.settings:
type: config_object
label: 'Example config'
mapping:
message:
type: text
label: 'Message'
दूसरी फ़ाइल अनुवाद फ़ॉर्म से लिंक जोड़ती है:
# /modules/example/example.config_translation.yml
example.admin.config:
title: 'Example module'
base_route_name: example.admin.config
names:
- example.settings
कुंजी का नाम base_route नाम के समान होता है: example.admin.config आपके मॉड्यूल की एडमिन कॉन्फ़िगरेशन फ़ॉर्म का रूट नाम है।
फ़ाइल अधिक जटिल सूचियाँ और key/value पेयर्स भी शामिल कर सकती है। उदाहरण: views.view.content.yml।
कॉन्फ़िगरेशन ट्रांसलेशन अपने आप कॉन्फ़िगरेशन फ़ॉर्म में “अनुवाद” टैब जोड़ देता है। लेकिन अगर केवल एक ही टैब उपलब्ध है तो यह दिखाई नहीं देगा। डिफ़ॉल्ट टैब जोड़ने के लिए example.links.task.yml बनाना होगा।
# example.links.task.yml example.admin.config: route_name: example.admin.config title: Settings base_route: example.admin.config
कॉन्फ़िगरेशन का उपयोग
Drupal 8 PHP API के साथ आता है, जिससे आप कॉन्फ़िगरेशन को पढ़ और लिख सकते हैं। सबसे सरल तरीका है Drupal::config() का उपयोग:
$config = \Drupal::config('example.settings');
// यह 'Hello' प्रिंट करेगा।
print $config->get('message');
// यह 'en' प्रिंट करेगा।
print $config->get('langcode');
यदि आप कॉन्फ़िगरेशन को संपादित करना और नया मान सेव करना चाहते हैं, तो \Drupal::service('config.factory')->getEditable() का उपयोग करें:
$config = \Drupal::service('config.factory')->getEditable('example.settings');
// नया message मान सेट करें और सेव करें।
$config->set('message', 'Hi')->save();
// अब 'Hi' प्रिंट होगा।
print $config->get('message');