logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

12.15.4. Dependency Injection im ConfigFormBase Konfigurationsformular

25/05/2025, by Ivan

Menu

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().