Scroll
12.15.4. Inyección de dependencias en un formulario de configuración ConfigFormBase
En los artículos anteriores analizamos qué son los Servicios, la Inyección de Dependencias (DI) y cómo utilizarlos en tu controlador, bloque y formulario:
12.15. Servicios e Inyección de Dependencias.
12.15.1. Inyección de dependencias en el controlador
12.15.2. Inyección de dependencias en un bloque
12.15.3. Inyección de dependencias en BaseForm
En este artículo se muestra un ejemplo de cómo agregar servicios mediante DI en una clase de formulario de configuración que hereda 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;
/**
* Configura los ajustes de commerce_order_number para este sitio.
*/
class SettingsForm extends ConfigFormBase {
/**
* El gestor de generadores de número de pedido.
*
* @var \Drupal\commerce_order_number\OrderNumberGeneratorManager
*/
protected $orderNumberGeneratorManager;
/**
* El formateador de número de pedido.
*
* @var \Drupal\commerce_order_number\OrderNumberFormatterInterface
*/
protected $orderNumberFormatter;
/**
* Constructor de SettingsForm.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* La fábrica de configuración.
* @param \Drupal\commerce_order_number\OrderNumberGeneratorManager $order_number_generator_manager
* El gestor de generadores de número de pedido.
* @param \Drupal\commerce_order_number\OrderNumberFormatterInterface $order_number_formatter
* El formateador de número de pedido.
*/
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);
...
}
}
Los servicios en un formulario de configuración se inyectan de la misma manera que en un formulario estándar, utilizando los métodos __construct()
y create()
.