Défilement
12.15.4. Injection de dépendances dans le formulaire de configuration ConfigFormBase
Dans les articles précédents, nous avons examiné ce que sont les Services, l’Injection de Dépendances (DI) et comment les utiliser dans votre contrôleur, bloc et formulaire :
12.15. Services et Injection de Dépendances.
12.15.1. Injection de Dépendances dans le contrôleur
12.15.2. Injection de Dépendances dans le bloc
12.15.3. Injection de Dépendances dans BaseForm
Dans cet article, un exemple de comment ajouter des services via DI dans une classe de formulaire de configuration héritant de ConfigFormBase
:
/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 les paramètres de commerce_order_number pour ce site.
*/
class SettingsForm extends ConfigFormBase {
/**
* Le gestionnaire de générateurs de numéro de commande.
*
* @var \Drupal\commerce_order_number\OrderNumberGeneratorManager
*/
protected $orderNumberGeneratorManager;
/**
* Le formateur de numéro de commande.
*
* @var \Drupal\commerce_order_number\OrderNumberFormatterInterface
*/
protected $orderNumberFormatter;
/**
* Constructeur de la classe SettingsForm.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* L’usine pour les objets de configuration.
* @param \Drupal\commerce_order_number\OrderNumberGeneratorManager $order_number_generator_manager
* Le gestionnaire de générateurs de numéro de commande.
* @param \Drupal\commerce_order_number\OrderNumberFormatterInterface $order_number_formatter
* Le formateur de numéro de commande.
*/
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);
...
}
}
Les services pour le formulaire de configuration sont injectés de la même manière que pour un formulaire classique, en utilisant les méthodes __construct()
et create()
.