Travail avec les formulaires de configuration
Utiliser $config dans le contexte d’un formulaire
Vous pouvez utiliser les formulaires de configuration pour comprendre comment $config peut récupérer les données saisies par l’utilisateur et modifier les données dans le fichier {module}.settings.yml. Voici le code pour déclarer l’objet $config dans un formulaire, que vous trouverez dans le fichier PHP du formulaire de configuration.
La classe Core ConfigFactory de Drupal est une manière de lire et écrire des données de configuration, elle est utilisée pour créer une instance de l’objet Config basée sur le contenu du fichier de configuration spécifié. Ce nouvel objet Config peut ensuite être utilisé pour effectuer des opérations CRUD sur ces données.
Exemple de définition de formulaire (situé dans example/src/Form/exampleSettingsForm.php) :
namespace Drupal\example\Form; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; /** * Configure les paramètres de example pour ce site. */ class ExampleSettingsForm extends ConfigFormBase { /** * Paramètres de configuration. * * @var string */ const SETTINGS = 'example.settings'; /** * {@inheritdoc} */ public function getFormId() { return 'example_admin_settings'; } /** * {@inheritdoc} */ protected function getEditableConfigNames() { return [ static::SETTINGS, ]; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $config = $this->config(static::SETTINGS); $form['example_thing'] = [ '#type' => 'textfield', '#title' => $this->t('Things'), '#default_value' => $config->get('example_thing'), ]; $form['other_things'] = [ '#type' => 'textfield', '#title' => $this->t('Other things'), '#default_value' => $config->get('other_things'), ]; return parent::buildForm($form, $form_state); } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { // Récupérer la configuration. $this->configFactory->getEditable(static::SETTINGS) // Définir le paramètre de configuration soumis. ->set('example_thing', $form_state->getValue('example_thing')) // Vous pouvez définir plusieurs configurations en appelant // plusieurs fois set(). ->set('other_things', $form_state->getValue('other_things')) ->save(); parent::submitForm($form, $form_state); } }
Fichier de routage (example.routing.yml) :
example.settings: path: '/admin/config/example/settings' defaults: _form: '\Drupal\example\Form\ExampleSettingsForm' _title: 'example' requirements: _permission: 'administer site configuration'
En utilisant l’objet Config, vous pouvez simplifier le stockage des données collectées via le formulaire. Avec le code ci-dessus dans le fichier du formulaire de configuration, vous pourrez stocker les données du formulaire dans {module}.settings.yml.
Toute classe qui étend ConfigFormBase doit implémenter la méthode getEditableConfigNames
et retourner un tableau des noms de configurations qu’elle modifie.