स्क्रॉल
12.15.4. ConfigFormBase कॉन्फ़िगरेशन फॉर्म में डिपेंडेंसीज़ इंजेक्शन
पिछले लेखों में हमने देखा कि 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() मेथड्स का उपयोग करके।