logo

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - नया लेआउट बिल्डर अनुभव❗

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - स्टाइलिश, कस्टमाइज़ेबल ब्लॉक टाइप्स: स्लाइडशो, टैब्स, कार्ड्स, एकॉर्डियन्स और कई अन्य। बैकग्राउंड, DOM बॉक्स, जावास्क्रिप्ट प्लगइन्स के लिए बिल्ट-इन सेटिंग्स। आज ही लेआउट बिल्डिंग का भविष्य अनुभव करें।

डेमो EBT मॉड्यूल्स EBT मॉड्यूल्स डाउनलोड करें

❗एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - नया पैराग्राफ्स अनुभव

एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - एनालॉजिकल पैराग्राफ आधारित मॉड्यूल्स का सेट।

डेमो EPT मॉड्यूल्स EPT मॉड्यूल्स डाउनलोड करें

स्क्रॉल
03/10/2025, by Ivan

Menu

यह पेज सरल कॉन्फ़िगरेशन के लिए कॉन्फ़िगरेशन डाटा प्राप्त करने और सेट करने के API का वर्णन करता है। (यह कॉन्फ़िगरेशन ऑब्जेक्ट्स में संग्रहीत जानकारी के लिए नहीं है।)

कॉन्फ़िगरेशन डाटा

हर मॉड्यूल डिफ़ॉल्ट कॉन्फ़िगरेशन प्रदान कर सकता है। उदाहरण के लिए, मेंटेनेंस मोड की सेटिंग्स core/modules/system/config/install/system.maintenance.yml में परिभाषित हैं। इस फ़ाइल का पहला भाग namespace है, जो यह दर्शाता है कि किस मॉड्यूल ने यह कॉन्फ़िगरेशन प्रदान किया है (इस उदाहरण में system मॉड्यूल), जिसके बाद subsystem (इस उदाहरण में maintenance) आता है। फ़ाइल अनिवार्य रूप से config/install डायरेक्टरी में होनी चाहिए। इसमें फ़ाइल नाम में “.” होना चाहिए ताकि ConfigBase->validateName($name) द्वारा जाँचा जा सके। यह फ़ाइल निम्नलिखित YAML कोड रखती है:

message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.'
langcode: en

कॉन्फ़िगरेशन nested भी हो सकती है, जैसे कि प्रदर्शन सेटिंग्स (system.performance.yml):

cache:
  page:
    enabled: '0'
    max_age: '0'
preprocess:
  css: '0'
  js: '0'
response:
  gzip: '0'

महत्वपूर्ण: root keys को mapping होना चाहिए

कॉन्फ़िगरेशन के root पर डाटा mapping के रूप में प्रदर्शित होना चाहिए, न कि किसी अप्रत्याशित sequence के रूप में। उदाहरण के लिए, यदि आप प्रत्येक उपलब्ध entity type के लिए डाटा संग्रहीत कर रहे हैं, तो parent key को entity type बनाइए और एक root key entity_type जोड़ें। नीचे layout का उदाहरण देखें:

entity_type:
  commerce_order:
    foo: 'bar'
  node:
    foo: 'bar'
  user:
    foo: 'bar'

यदि entity types root key हैं, तो schema के माध्यम से कॉन्फ़िगरेशन को प्रदर्शित करना असंभव है। इसके अलावा, जब कॉन्फ़िगरेशन किसी मॉड्यूल (या थीम) की स्थापना के हिस्से के रूप में इंस्टॉल होती है, तब Drupal core अतिरिक्त जानकारी नहीं जोड़ पाएगा।

कॉन्फ़िगरेशन के साथ इंटरैक्शन

आप इन फ़ाइलों के साथ Config ऑब्जेक्ट के माध्यम से इंटरैक्ट करते हैं और config() फ़ंक्शन को फ़ाइल नाम (extension को छोड़कर) के साथ कॉल करके Config ऑब्जेक्ट का instance बनाते हैं। config() फ़ंक्शन को कॉल करने से \Drupal\Core\Config\ImmutableConfig का instance लौटेगा।

// Immutable Config (केवल पढ़ने योग्य)।
$config = \Drupal::config('system.performance');
// Mutable Config (पढ़ें / लिखें)।
$config = \Drupal::service('config.factory')->getEditable('system.performance');

Config ऑब्जेक्ट प्राप्त करने के बाद, आप विभिन्न तरीकों से इसके साथ इंटरैक्ट कर सकते हैं।

कॉन्फ़िगरेशन पढ़ना

कॉन्फ़िगरेशन get() मेथड का उपयोग करके पढ़ी जाती है। इसे कई तरीकों से इस्तेमाल किया जा सकता है। कॉन्फ़िगरेशन का कोई हिस्सा पढ़ने के लिए, बस उसका key निर्दिष्ट करें।

$config = \Drupal::config('system.maintenance');
$message = $config->get('message');

\Drupal::config() कॉल्स को chain भी किया जा सकता है।

$message = \Drupal::config('system.maintenance')->get('message');

Nested कॉन्फ़िगरेशन पढ़ने के लिए, keys को “.” कैरेक्टर से अलग करें।

$enabled = \Drupal::config('system.performance')->get('cache.page.enabled');

आप किसी भी स्तर पर कॉन्फ़िगरेशन पढ़ सकते हैं, यदि आपके स्तर के नीचे array में nested कॉन्फ़िगरेशन है।

$page_cache = \Drupal::config('system.performance')->get('cache.page');

यह एक array लौटाएगा जिसमें दो keys होंगे – “enabled” और “max_age”।

कॉन्फ़िगरेशन ऑब्जेक्ट में सभी डाटा लौटाने के लिए, बस get() को बिना argument के कॉल करें।

आप सभी उपलब्ध कॉन्फ़िगरेशन keys भी लौटा सकते हैं, या केवल वे keys जो किसी विशेष substring (prefix $) से शुरू होती हैं।

$keys = \Drupal::service('config.factory')->listAll($prefix = "");

कॉन्फ़िगरेशन लिखना

कॉन्फ़िगरेशन बदलने के लिए, आपको \Drupal\Core\Config\Config (mutable कॉन्फ़िगरेशन ऑब्जेक्ट) का instance प्राप्त करना होगा, config factory पर getEditable() कॉल करके। \Drupal\Core\Config\ImmutableConfig के instance के लिए परिवर्तन करने या delete() / save() फ़ंक्शन को कॉल करने का प्रयास करने से ImmutableConfigException फेंका जाएगा।

यह इस प्रकार किया जाता है:

\Drupal::service('config.factory')->getEditable('system.performance');

कॉन्फ़िगरेशन को set() मेथड के साथ बदला या जोड़ा जाता है और save() मेथड के साथ सेव किया जाता है। ध्यान दें कि कॉन्फ़िगरेशन को स्पष्ट रूप से सेव किया जाना चाहिए; केवल डाटा सेट करना उन्हें सेव नहीं करता।

$config = \Drupal::service('config.factory')->getEditable('system.performance');

// Scalar वैल्यू सेट करें।
$config->set('cache.page.enabled', 1);

// वैल्यूज़ का array सेट करें।
$page_cache_data = ['enabled' => 1, 'max_age' => 5];
$config->set('cache.page', $page_cache_data);

// डाटा डेटाबेस में सेव करें।
$config->save();

set() फ़ंक्शन भी chainable है, इसलिए यदि आपको केवल एक वैल्यू बदलनी है, तो आप इसे एक ही लाइन में कर सकते हैं।

\Drupal::service('config.factory')->getEditable('system.performance')->set('cache.page.enabled', 1)->save();

यदि आप कॉन्फ़िगरेशन ऑब्जेक्ट में सभी डाटा को बदलना चाहते हैं, तो setData() फ़ंक्शन का उपयोग करें। आप setData() का उपयोग केवल subset को बदलने के लिए नहीं कर सकते – यदि आप पूरे ऑब्जेक्ट से कम बदलना चाहते हैं, तो आपको इसके बजाय एक या अधिक set() कॉल्स का उपयोग करना होगा। setData() का उपयोग करते समय आपको प्रत्येक key और value उसी associative array फ़ॉर्मेट में देना होगा जैसा get() (बिना argument) द्वारा लौटाया जाता है। system.performance.yml में सिस्टम प्रदर्शन सेटिंग्स के लिए यह इस प्रकार दिखेगा:

// सभी वैल्यूज़ सेट करें।
\Drupal::service('config.factory')->getEditable('system.performance')->setData([
    'cache' => [
      'page' => [
        'enabled' => '0',
        'max_age' => '0',
      ],
    ],
    'preprocess' => [
      'css' => '0',
      'js' => '0',
    ],
    'response' => [
      'gzip' => '0',
    ],
  ])
  ->save();

कॉन्फ़िगरेशन हटाना

व्यक्तिगत कॉन्फ़िगरेशन वैल्यूज़ को clear() फ़ंक्शन का उपयोग करके reset किया जा सकता है, जो chainable भी है।

$config = \Drupal::service('config.factory')->getEditable('system.performance');
$config->clear('cache.page.max_age')->save();
$page_cache_data = $config->get('cache.page');

इस उदाहरण में $page_cache_data एक array लौटाएगा जिसमें केवल एक key – “enabled” होगा, क्योंकि “max_age” unset कर दिया गया है।

पूरे कॉन्फ़िगरेशन सेट्स को delete() फ़ंक्शन का उपयोग करके हटाया जा सकता है।

\Drupal::service('config.factory')->getEditable('system.performance')->delete();

ध्यान दें कि इसके बाद save() फ़ंक्शन को कॉल नहीं करना चाहिए, क्योंकि यह कॉन्फ़िगरेशन सेट का खाली संस्करण बना देगा।

सर्वोत्तम प्रथाएँ

एक ही फ़ंक्शन के भीतर कई बार कॉन्फ़िगरेशन ऑब्जेक्ट्स का instance बनाने से बचें, क्योंकि इससे प्रदर्शन कम हो जाता है। निम्नलिखित कोड अनावश्यक रूप से कॉन्फ़िगरेशन ऑब्जेक्ट 'foo.bar' का दो बार instance बनाता है।

\Drupal::service('config.factory')->getEditable('foo.bar')->set('foo', 'foo')->save();
\Drupal::service('config.factory')->getEditable('foo.bar')->set('bar', 'bar')->save();

बेहतर समाधान यह होगा कि कॉन्फ़िगरेशन ऑब्जेक्ट का instance केवल एक बार बनाएँ, उसे एक वेरिएबल में स्टोर करें और अपने कोड के बाकी हिस्से के लिए उसी वेरिएबल का उपयोग करें।

$config = \Drupal::service('config.factory')->getEditable('foo.bar');
$config
  ->set('foo', 'foo')
  ->set('bar', 'bar')
  ->save();

सर्विसेज़ में कॉन्फ़िगरेशन वैल्यू inject करना

कॉन्फ़िगरेशन वैल्यूज़ को आपके custom service में सर्विस फैक्टरी का उपयोग करके inject किया जा सकता है।

services:
  app.service:
    class: Drupal/mail_module/Service
    factory: Drupal/mail_module/ServiceFactory:create
    arguments: ['@config.factory']
class ServiceFactory {
  static function create($config) {
    return new Service($config->get('mail.config')->get('transport'));
  }
}

class Service {
  public function __construct($transport) {
    $this->mailTransport = $transport;
  }
}

यह उदाहरण यहाँ से अनुकूलित किया गया है: सर्विसेज़ में कॉन्फ़िगरेशन वैल्यूज़ कैसे inject करें?