Marzo 03, 2014
enzo
Para los desarrolladores usuales de Drupal es usual crear funciones que validen un formulario y así verificar que los valores ingresados sean los esperados, sin embargo si contamos con muchos formularios similares estaríamos repitiendo el mismo código de validación una y otra vez.
Si quisiéramos mejorar un poco nuestro código podríamos crear funciones que validen los valores a elementos del formulario del mismo tipo y lo asignamos a cada elemento usando la propiedad de FAPI #element_validate.
A continuación les presento un ejemplo que valida un elemento FAPI para que sea sea un número igual o mayor a cero y que este dentro de un rango definido.
- Definir la función de validación.
Esta función recibiría dos parámetros, el primero parámetro $element sera el elemento a validar y el segundo parámetros sera el***$form_state*** que nos permitirá acceder a otros elementos en caso de que sean necesarios para hacer una validación condicional.
Veamos la función.
/**
* Form element validation handler for integer elements that must be positive.
*/
function _MIMODULO_validate_integer_positive($element, &$form_state) {
$value = $element['#value'];
$min = $element['#min'];
$max = $element['#max'];
if ($value !== '' && (!is_numeric($value) || intval($value) != $value || $value < 0)) {
form_error($element, t('%name must be a positive integer.', array('%name' => $element['#title'])));
}
// Validate if value is inside the range
if(isset($min) && isset($max)) {
if($value < $min || $value > $max) {
form_error($element, t('%name must be a positive integer inside the range [%min-%max].', array('%name' => $element['#title'], '%min' => $min, '%max' => $max)));
}
}
}
Como vemos el rango en opcional.
- Asociar función de validacion a elemento del formulario.
A continuación definiremos un elemento de tipo textfield para aceptar un valor como se muestra a continuación.
$form['frecuency'] = array(
'#type' => 'textfield',
'#element_validate' => array('_MIMODULO_validate_integer_positive'),
'#title' => t('Frequency'),
'#default_value' => variable_get('frecuency', 0),
'#size' => 4,
'#min' => 0,
'#max' => 1000,
'#required' => TRUE,
'#attributes' => array(),
);
Como podemos ver los valores #min y #max no son propiedades propias de un elemento FAPI, pero tenemos la libertad de definirnos y la función de validación sera el que le de sentido a estas propiedades.
Nuestra función se ejecutara al hacer submit al formulario y si ingresamos un valor fuera del rango obtendremos un error similar al de la siguiente imagen.
Espero haya sido de su agrado y los invito a crear sus propias funciones de validación.