Como añadir validación personalizada a formularios en Drupal

Codigo php

Los formularios en Drupal nunca son sencillos, siempre tienen alguna complicación o algún secreto que nos cuesta descubrir. Y es que al tratarse de arrays es complicado saber como podemos realizar algunas tareas o funciones.

Este es el caso de añadir una validación extra a un formulario que no es nuestro y estamos alterando, y es que algo tan sencillo puede resultar complejo si no sabemos como se hace y la documentación no es muy clara.

Añadir validación extra

Para añadir una validación extra lo primero que debemos hacer es alterar el formulario, para esto necesitamos el hook_form_alter, el cual nos va a permitir añadir la validación.

Vamos a partir con la idea de que necesitamos añadir esa validación personalizada a un formulario de un nodo de tipo artículo. Podemos utilizar el siguiente código en ese caso.

/**
 * Implements hook form_alter().
 */
function escueladrupal_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  // Add extra validation.
  if (in_array($form_id, ['node_article_edit_form', 'node_article_form'])) {
    $form['#validate'][] = '_escueladrupal_validate_node_article_form';
  }
}

En ese hook podemos ver que añadimos una nueva validación utilizando ‘#validate’, y el nombre que indicamos es el de una función que se llama “_escueladrupal_validate_node_article_form”. Ahora debemos crear esa función y en ella podremos realizar validaciones adicionales a la que Drupal ya provea para el formulario.

/**
 * Validación adicional para los nodos de tipo articulo.
 */
function _escueladrupal_validate_node_article_form($form, FormStateInterface $form_state) {

    $title = @$form_state->getValue('title')[0]['value'];
	
	if (strlen($title) < 20 ) {
	  $form_state->setError($form['title'], t("The title can't have less that 20 letters"));
	}

}

En este ejemplo estamos comprobando que el título del nodo tenga mas de 20 letras, si no lo cumple, se añadirá un error y Drupal no realizará el envió completo del formulario.

Y de esa manera tan sencilla podemos añadir tantas validaciones como deseemos ya que la estamos añadiendo a un array del formulario.

Comparte este artículo:
Publicado por Borja
Image

Me metí en la aventura de Drupal con la versión 6, y aquí estoy, 10 años después, escribiendo articulos y haciendo videos sobre Drupal, quien me lo iba a decir. Aunque he probado otros framworks y cms, me quedo con Drupal de lejos, pero Symfony y Django estan entre mis favoritos. Aficionado a la montaña, la bicicleta, y el comer, de eso que no falte.