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?

gilzero
la source

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"');
  }
}
Clive
la source
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
6

Vous devez utiliser hook_form_alteret ajouter votre fonction à la #validatepropriété.

Countzero
la source