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',
];
}
}