logo

Extra Block Types (EBT) - Nieuwe Layout Builder ervaring❗

Extra Block Types (EBT) - gestileerde, aanpasbare bloktypes: Slideshows, Tabs, Cards, Accordions en vele andere. Ingebouwde instellingen voor achtergrond, DOM Box, javascript-plugins. Ervaar vandaag al de toekomst van layout building.

Demo EBT-modules Download EBT-modules

❗Extra Paragraph Types (EPT) - Nieuwe Paragraphs ervaring

Extra Paragraph Types (EPT) - analoge op paragrafen gebaseerde set modules.

Demo EPT-modules Download EPT-modules

Scroll

Configuratieformulier van Drupal

04/10/2025, by Ivan

Menu

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

}