A partir de la versión 10.2, Drupal permite validación de configuración (por ejemplo, que una propiedad "number" sea de tipo numérico) usando el archivo schema de un módulo. Así mismo, también permite simplificar el formulario de configuración.
#mymodule.schema.yml
mymodule.settings:
type: config_object
label: 'My Module Settings'
mapping:
string:
type: string
label: String
constraints:
NotBlank: []
Length:
max: 10
number:
type: integer
label: Number
constraints:
Range:
min: 0
max: 100Para el ejemplo, se usan un campo de texto normal y un campo numérico.
- Al campo de texto se le fuerza a que no esté vacío y que su longitud no sea mayor de 10 caracteres.
- Al campo numérico, se le fuerza que sea un entero entre 0 y 100
<?php
namespace Drupal\mymodule\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
/**
* Defines the settings form for My Module.
*/
class MyModuleSettingsForm extends ConfigFormBase {
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
return ['mymodule.settings'];
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'mymodule_settings_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$form['string'] = [
'#type' => 'textfield',
'#title' => $this->t('Text'),
'#config_target' => 'mymodule.settings:string',
];
$form['number'] = [
'#type' => 'number',
'#title' => $this->t('Number'),
'#config_target' => 'mymodule.settings:number',
];
return parent::buildForm($form, $form_state);
}
}En este formulario de configuración super simple, no se ponen atributos "required" o "step" para saltar la validación del formulario y que drupal compruebe directamente la validación de la configuración definida en el archivo .schema.yml.
- No es necesario usar "default_value", se asigna directamente desde la configuración.
- La función submitForm puede ser ignorada, ya que al tener los "config_targets" definidos, drupal se encarga de asignarlos y guardar la configuración directamente.
Ejemplos de errores en la validación:
Para más información y casos avanzados (ej: que sea necesario transformar el valor de configuración antes de guardarlo), puede verse el change record.
Mensaje de aviso de configuración sobreescrita
A partir de la versión 10.4 / 11.0, se añadió la posibilidad de mostrar un mensaje de aviso automáticamente si en un formulario de configuración hay configuración sobreescrita. Por ejemplo, si en sel archivo settings.php se sobreescribe el valor de "number". Al entrar en el formulario aparecerá automáticamente el mensaje:
$config['mymodule.settings']['number'] = 77;