logo

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

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

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

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

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

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

स्क्रॉल

12.15.4. ConfigFormBase कॉन्फ़िगरेशन फॉर्म में डिपेंडेंसीज़ इंजेक्शन

29/09/2025, by Ivan

Menu

पिछले लेखों में हमने देखा कि Services, Dependency Injection (DI) क्या हैं और उन्हें अपने कंट्रोलर, ब्लॉक और फॉर्म में कैसे उपयोग करें:

12.15. Services और Dependency Injection
12.15.1. कंट्रोलर में Dependency Injection
12.15.2. ब्लॉक में Dependency Injection
12.15.3. BaseForm में Dependencies Injection

इस लेख में एक उदाहरण है कि कॉन्फ़िगरेशन फॉर्म के क्लास में, जो ConfigFormBase से इनहेरिट करता है, DI के माध्यम से सर्विसेज़ कैसे जोड़ी जाती हैं:

/modules/contrib/commerce_order_number/src/Form/SettingsForm.php:

<?php

namespace Drupal\commerce_order_number\Form;

use Drupal\commerce_order_number\OrderNumber;
use Drupal\commerce_order_number\OrderNumberFormatterInterface;
use Drupal\commerce_order_number\OrderNumberGeneratorManager;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Configure commerce_order_number settings for this site.
 */
class SettingsForm extends ConfigFormBase {

  /**
   * The order number generator manager.
   *
   * @var \Drupal\commerce_order_number\OrderNumberGeneratorManager
   */
  protected $orderNumberGeneratorManager;

  /**
   * The order number formatter.
   *
   * @var \Drupal\commerce_order_number\OrderNumberFormatterInterface
   */
  protected $orderNumberFormatter;

  /**
   * Constructs a new SettingsForm object.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The factory for configuration objects.
   * @param \Drupal\commerce_order_number\OrderNumberGeneratorManager $order_number_generator_manager
   *   The order number generator manager.
   * @param \Drupal\commerce_order_number\OrderNumberFormatterInterface $order_number_formatter
   *   The order number formatter.
   */
  public function __construct(ConfigFactoryInterface $config_factory, OrderNumberGeneratorManager $order_number_generator_manager, OrderNumberFormatterInterface $order_number_formatter) {
    parent::__construct($config_factory);

    $this->orderNumberGeneratorManager = $order_number_generator_manager;
    $this->orderNumberFormatter = $order_number_formatter;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('config.factory'),
      $container->get('plugin.manager.commerce_order_number_generator'),
      $container->get('commerce_order_number.order_number_formatter')
    );
  }

  /**
   * @inheritDoc
   */
  protected function getEditableConfigNames() {
    return ['commerce_order_number.settings'];
  }

  /**
   * @inheritDoc
   */
  public function getFormId() {
    return 'commerce_order_number_settings';
  }

  /**
   * @inheritDoc
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config('commerce_order_number.settings');
    ...
    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $this->config('commerce_order_number.settings')
      ->set('generator', $form_state->getValue('generator'))
      ->set('padding', $form_state->getValue('padding'))
      ->set('pattern', $form_state->getValue('pattern'))
      ->set('force', $form_state->getValue('force'))
      ->save();

    parent::submitForm($form, $form_state);
  }

  /**
   * @inheritDoc
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    parent::validateForm($form, $form_state);
    ...
    $example_order_number_formatted = $this->orderNumberFormatter->format($example_order_number, $padding, $pattern);
    ...
  }

}

कॉन्फ़िगरेशन फॉर्म के लिए सर्विसेज़ को उसी तरह से कनेक्ट किया जाता है जैसे सामान्य फॉर्म के लिए, यानी __construct() और create() मेथड्स का उपयोग करके।