Formulaire de configuration Drupal
Partie IV du guide pratique de création de modules de base Drupal 8
De .info aux tests, uniquement les bases
Jusqu’ici tout est assez propre, mais comment pouvons-nous modifier ce que nous voyons ? Avec certains formulaires, bien sûr.
Pour des cas d’usage simples, voir la section « Paramètres du site et étiquettes ».
/src/Form/LoremIpsumForm.php
<?php namespace Drupal\loremipsum\Form; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; class LoremIpsumForm extends ConfigFormBase { /** * {@inheritdoc} */ public function getFormId() { return 'loremipsum_form'; }
Nous commençons notre fichier de configuration en étendant ConfigFormBase. La classe LoremIpsumForm est la classe référencée dans le fichier routing.yml.
Ensuite, la méthode qui construit réellement le formulaire de configuration :
/** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { // Constructeur du formulaire. $form = parent::buildForm($form, $form_state); // Paramètres par défaut. $config = $this->config('loremipsum.settings');
La variable $config est l’endroit où nous stockons nos réglages actuels.
Nous définissons ensuite nos champs de formulaire et retournons le formulaire :
// Champ titre de la page. $form['page_title'] = [ '#type' => 'textfield', '#title' => $this->t('Titre de la page du générateur Lorem ipsum :'), '#default_value' => $config->get('loremipsum.page_title'), '#description' => $this->t('Donnez un titre à votre page génératrice de lorem ipsum.'), ]; // Champ texte source. $form['source_text'] = [ '#type' => 'textarea', '#title' => $this->t('Texte source pour la génération de lorem ipsum :'), '#default_value' => $config->get('loremipsum.source_text'), '#description' => $this->t('Écrivez une phrase par ligne. Ces phrases seront utilisées pour générer un texte aléatoire.'), ]; return $form; }
Nous devons également déclarer les méthodes validateForm(), submitForm() et getEditableConfigNames(), même si nous ne les utilisons pas :
/** * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $config = $this->config('loremipsum.settings'); $config->set('loremipsum.source_text', $form_state->getValue('source_text')); $config->set('loremipsum.page_title', $form_state->getValue('page_title')); $config->save(); return parent::submitForm($form, $form_state); } /** * {@inheritdoc} */ protected function getEditableConfigNames() { return [ 'loremipsum.settings', ]; } }