Scroll
12.15.4. Ubrizgavanje zavisnosti (Dependency Injection) u konfiguracionoj formi ConfigFormBase
U prethodnim člancima smo objasnili šta su Servisi, Dependency Injection (DI) i kako ih koristiti u svom kontroleru, bloku i formi:
12.15. Servisi i Dependency Injection.
12.15.1. Dependency Injection u kontroleru
12.15.2. Dependency Injection u bloku
12.15.3. Dependency Injection u BaseForm
U ovom članku je primer kako dodavati servise putem DI u klasu konfiguracione forme koja nasleđuje 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;
/**
* Konfiguriše podešavanja commerce_order_number modula za ovaj sajt.
*/
class SettingsForm extends ConfigFormBase {
/**
* Menadžer generatora broja porudžbine.
*
* @var \Drupal\commerce_order_number\OrderNumberGeneratorManager
*/
protected $orderNumberGeneratorManager;
/**
* Formatirač broja porudžbine.
*
* @var \Drupal\commerce_order_number\OrderNumberFormatterInterface
*/
protected $orderNumberFormatter;
/**
* Konstruktor nove SettingsForm instance.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* Fabrika za konfiguracione objekte.
* @param \Drupal\commerce_order_number\OrderNumberGeneratorManager $order_number_generator_manager
* Menadžer generatora broja porudžbine.
* @param \Drupal\commerce_order_number\OrderNumberFormatterInterface $order_number_formatter
* Formatirač broja porudžbine.
*/
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);
...
}
}
Servisi za konfiguracionu formu se povezuju na isti način kao i za običnu formu, koristeći metode __construct() i create().