Scorri
Modulo di configurazione Drupal
Parte IV della guida pratica alla creazione di moduli base in Drupal 8
Dallo .info ai test, solo le basi
Finora tutto è abbastanza ordinato, ma come possiamo modificare ciò che vediamo? Con alcuni form, naturalmente.
Per scenari d’uso semplici, vedi la sezione «Impostazioni del sito e etichette».
/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';
}
Iniziamo il nostro file di configurazione estendendo ConfigFormBase. La classe LoremIpsumForm è la classe specificata nel file routing.yml.
Segue quindi il metodo che costruisce effettivamente il form di configurazione:
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
// Costruttore del form.
$form = parent::buildForm($form, $form_state);
// Impostazioni predefinite.
$config = $this->config('loremipsum.settings');
La variabile $config è il luogo in cui memorizziamo le nostre impostazioni correnti.
Poi definiamo i campi del nostro form e restituiamo il form:
// Campo titolo della pagina.
$form['page_title'] = array(
'#type' => 'textfield',
'#title' => $this->t('Titolo della pagina del generatore Lorem ipsum:'),
'#default_value' => $config->get('loremipsum.page_title'),
'#description' => $this->t('Dai un titolo alla pagina del tuo generatore di lorem ipsum.'),
);
// Campo testo sorgente.
$form['source_text'] = array(
'#type' => 'textarea',
'#title' => $this->t('Testo sorgente per la generazione di lorem ipsum:'),
'#default_value' => $config->get('loremipsum.source_text'),
'#description' => $this->t('Scrivi una frase per riga. Queste frasi verranno utilizzate per generare testo casuale.'),
);
return $form;
}
Dobbiamo inoltre dichiarare i metodi validateForm (), submitForm () e getEditableConfigNames (), anche se non li utilizziamo:
/**
* {@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',
];
}
}