Validation personnalisée d'un formulaire?


30

J'ai besoin d'ajouter une validation personnalisée à un formulaire, permet d'ajouter le formulaire d'article.

Je m'attendais à quelque chose comme hook_FORM_ID_validate()gérer cela, mais je ne trouve rien de pertinent dans la documentation de l'API.

Comment ajouter une validation personnalisée à un formulaire?

Réponses:


57

Vous pouvez ajouter n'importe quel nombre de fonctions de validation à n'importe quel formulaire de la hook_form_FORM_ID_alter()manière suivante:

function mymodule_form_article_node_form_alter(&$form, &$form_state, $form_id) {
  // There will already be some validate handlers added so you need to add to the
  // array rather than overwrite it.
  $form['#validate'][] = 'mymodule_article_form_validate';

  // As mentioned above you can add as many as you want
  $form['#validate'][] = 'mymodule_article_form_validate_2';
}

function mymodule_article_form_validate($form, &$form_state) {
  // Random example, if the title is 'test' throw an error
  if ($form_state['values']['title'] == 'test') {
    form_set_error('title', 'Title cannot be "test"');
  }
}

Supposons que j'ai ajouté une validation de formulaire personnalisée à un formulaire qui a déjà 2 fonctions de validation. Alors, quelle est la première préférence dans Drupal 7?
Guru

Qui est le premier dans le tableau @Guru
Clive

Si le formulaire est user_registration_form, il conserve toujours "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture)". Supposons que je vais ajouter une validation personnalisée. Ensuite, cela devrait être comme ceci "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture [2] => user_register_validate)". Mais je veux exécuter la fonction "user_register_validate" au début.
Guru

Pour les autres domaines, vous devez utiliser:if ($form_state['values']['field_custom']['und'][0]['value'] == 'Error') { //throw error }
Chris Happy

comment définir la validation de la taille, l'extension de cette manière? Et encore une question, s'il existe des fonctionnalités ajax comme "upload" et "remove" comment nous gérons la validation pour cela?
steniya

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.