Scroll
12.15.4. Dependency injection in de ConfigFormBase-configuratievorm
In de vorige artikelen hebben we besproken wat Services en Dependency Injection (DI) zijn en hoe je ze kunt gebruiken in je controller, block en formulier:
12.15. Services en Dependency Injection.
12.15.1. Dependency Injection in de controller
12.15.2. Dependency Injection in een block
12.15.3. Dependency Injection in BaseForm
In dit artikel een voorbeeld van hoe je services via DI toevoegt in een klasse van een configuratieformulier die ConfigFormBase uitbreidt:
/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;
/**
* Configureert commerce_order_number instellingen voor deze site.
*/
class SettingsForm extends ConfigFormBase {
/**
* De ordernummer generator manager.
*
* @var \Drupal\commerce_order_number\OrderNumberGeneratorManager
*/
protected $orderNumberGeneratorManager;
/**
* De ordernummer formatter.
*
* @var \Drupal\commerce_order_number\OrderNumberFormatterInterface
*/
protected $orderNumberFormatter;
/**
* Construeert een nieuw SettingsForm object.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* De factory voor configuratieobjecten.
* @param \Drupal\commerce_order_number\OrderNumberGeneratorManager $order_number_generator_manager
* De ordernummer generator manager.
* @param \Drupal\commerce_order_number\OrderNumberFormatterInterface $order_number_formatter
* De ordernummer 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);
...
}
}
Services voor een configuratieformulier worden op dezelfde manier aangesloten als voor een gewoon formulier, met behulp van de methoden __construct() en create().