Scroll
Configuratieformulier van Drupal
Deel IV van de praktische handleiding voor het maken van basis Drupal 8-modules
Van .info tot tests, alleen de basis
Tot nu toe ziet alles er vrij netjes uit, maar hoe kunnen we veranderen wat we zien? Met een aantal formulieren natuurlijk.
Eenvoudige gebruiksscenario’s zijn te vinden in de sectie «Site-instellingen en labels».
/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'; }
We beginnen ons instellingenbestand dat ConfigFormBase
uitbreidt. De klasse LoremIpsumForm
is de klasse die wordt opgegeven in het bestand routing.yml
.
Daarna volgt de methode die het formulier met instellingen daadwerkelijk opbouwt:
/** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { // Formulierconstructor. $form = parent::buildForm($form, $form_state); // Standaardinstellingen. $config = $this->config('loremipsum.settings');
De variabele $config
is de plaats waar we onze huidige instellingen opslaan.
Vervolgens definiëren we onze formuliervelden en geven het formulier terug:
// Veld voor paginatitel. $form['page_title'] = array( '#type' => 'textfield', '#title' => $this->t('Lorem ipsum generator paginatitel:'), '#default_value' => $config->get('loremipsum.page_title'), '#description' => $this->t('Geef je lorem ipsum generatorpagina een titel.'), ); // Veld voor brontekst. $form['source_text'] = array( '#type' => 'textarea', '#title' => $this->t('Brontekst voor lorem ipsum-generatie:'), '#default_value' => $config->get('loremipsum.source_text'), '#description' => $this->t('Schrijf één zin per regel. Deze zinnen worden gebruikt om willekeurige tekst te genereren.'), ); return $form; }
We moeten ook de methodes validateForm()
, submitForm()
en getEditableConfigNames()
declareren, zelfs als we ze niet gebruiken:
/** * {@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', ]; } }