Form API element valideren

Drupal tip
Drupal tip

Form API element valideren

Het is in drupal mogelijk om form elementen individueel te valideren.

De standaard form validate gebeurt als volgt:


/**
 * Implements hook_form().
 */
function mymodule_form($form, &$form_state) {
  $form['my_field'] = array(
    '#type' => 'textfield',
    '#title' => t('My field'),
    '#size' => 4,
    '#required' => TRUE,
    '#default_value' => 'my default value',
  );
 
  return system_settings_form($form);
}
 
/**
 * Implements hook_validate().
 */
function mymodule_form_validate($form, &$form_state) {
  $allowed = array('value1', 'value2', 'value3', 'value4');
  if (!in_array($form_state['values']['my_field'], $allowed)) {
    form_set_error('my_field', t('You must enter a valid value.'));
  }
}

Form elementen kan je ook individueel valideren. Dit doe je als volgt:


'#element_validate' => array('mymodule_individual_validate'),

Dit resulteert in volgende code:


/**
 * Implements hook_form().
 */
function mymodule_form($form, &$form_state) {
  $form['my_field'] = array(
    '#type' => 'textfield',
    '#title' => t('My field'),
    '#size' => 4,
    '#required' => TRUE,
    '#default_value' => 'my default value',
    '#element_validate' => array('mymodule_individual_validate'),
  );
 
  return system_settings_form($form);
}

Het enige wat we nu nog moeten doen is de form validate functie aanpassen:


function mymodule_individual_validate($element, $form_state) {
  $allowed = array('value1', 'value2', 'value3', 'value4');
  if (!in_array($form_state['values']['my_field'], $allowed)) {
    form_error($element, t('You must enter a valid value.'));
  }
}

Let op het kleine verschil 'form_set_error' vs 'form_error'.

Wanneer je verschillende form elementen valideert, is het soms makkelijker en overzichtelijker om form elementen individueel te valideren in plaats van deze in één grote functie te valideren.

Drupal voorziet verschillende standaard element_validate functies:

  • element_validate_number
  • element_validate_integer
  • element_validate_integer_positive

 

Blijf op de hoogte via onze nieuwsbrief