Dans mon module Drupal 7, j'ai un formulaire et ses gestionnaires de validation. J'appelle mon formulaire à partir d'un field.tpl.php avec print render(drupal_get_form('my_form'))
; cela fonctionne comme prévu.
Le problème est en cas de mauvaise valeur d'entrée.
Il nécessite deux soumissions incorrectes avant d'afficher le message d'erreur: la première fois, il y a une bordure rouge autour de ma mauvaise entrée et la deuxième fois, le message d'erreur s'affiche (avec la bordure rouge).
Alors, quelle est la bonne façon d'utiliser form_set_error()
?
drupal_set_error()
fonction. Êtes-vous sûr de ne pas vouloir direform_set_error()
?Réponses:
Les générateurs de formulaires ne sont pas censés être appelés dans un fichier de modèle, car ils sont appelés trop tard. Lorsque vous appelez
render(drupal_get_form('my_form'))
, le code qui affiche les messages d'erreur a été exécuté et les éventuels messages d'erreur signalés par le gestionnaire de validation sont enregistrés dans la session en cours à partir de drupal_set_message () , qui est appelé depuisform_set_error()
.Le code pour imprimer le message d'erreur se trouve dans le fichier page.tpl.php .
Le code
drupal_set_message()
qui enregistre les messages à afficher est le suivant:la source
form_set_error()
dans un fichier modèle est la mauvaise façon. Alors, quelle est la bonne façon?drupal_get_form()
ne doit pas être appelé à l'intérieur d'un fichier modèle, mais à l'intérieur d'un module.Vous devriez regarder form_set_error à la place
si vous avez un élément comme celui-ci:
dans votre fonction de rappel de validation, faites-le si vous trouvez que les valeurs dans
$form_state['values']
ne sont pas validesla source
form_set_error()
devrait être appelé à l'intérieur de votrehook_validate()
fonction comme répondu par LSU_JBob.la source
hook_validate()
.