Scroll
12.15.4. Dependency Injection im ConfigFormBase Konfigurationsformular
In den vorherigen Artikeln haben wir besprochen, was Services und Dependency Injection (DI) sind und wie man sie in seinem Controller, Block und Formular verwendet:
12.15. Services und Dependency Injection.
12.15.1. Dependency Injection im Controller
12.15.2. Dependency Injection im Block
12.15.3. Dependency Injection im BaseForm
In diesem Artikel ein Beispiel, wie man Services über DI in einer Konfigurationsformular-Klasse, die von ConfigFormBase erbt, hinzufügt:
/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;
/**
* Konfiguration der commerce_order_number Einstellungen für diese Seite.
*/
class SettingsForm extends ConfigFormBase {
/**
* Der Manager für die Bestellnummerngeneratoren.
*
* @var \Drupal\commerce_order_number\OrderNumberGeneratorManager
*/
protected $orderNumberGeneratorManager;
/**
* Der Formatter für Bestellnummern.
*
* @var \Drupal\commerce_order_number\OrderNumberFormatterInterface
*/
protected $orderNumberFormatter;
/**
* Konstruktor eines neuen SettingsForm Objekts.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* Die Fabrik für Konfigurationsobjekte.
* @param \Drupal\commerce_order_number\OrderNumberGeneratorManager $order_number_generator_manager
* Der Manager für die Bestellnummerngeneratoren.
* @param \Drupal\commerce_order_number\OrderNumberFormatterInterface $order_number_formatter
* Der Formatter für Bestellnummern.
*/
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);
...
}
}
Services für Konfigurationsformulare werden genauso angebunden wie für normale Formulare, mit den Methoden __construct() und create().