In meinem Drupal 7-Modul habe ich ein Formular und seine Validierungshandler. Ich rufe mein Formular von einer field.tpl.php mit auf print render(drupal_get_form('my_form'))
; es funktioniert wie erwartet.
Das Problem liegt im Falle eines falschen Eingabewerts.
Vor dem Anzeigen der Fehlermeldung sind zwei falsche Übermittlungen erforderlich: Beim ersten Mal befindet sich ein roter Rand um meine falsche Eingabe, und beim zweiten Mal wird die Fehlermeldung angezeigt (mit dem roten Rand).
Also, was ist der richtige Weg zu verwenden form_set_error()
?
drupal_set_error()
Funktion. Bist du sicher, dass du es nicht so gemeint hastform_set_error()
?Antworten:
Formularersteller sollten nicht in einer Vorlagendatei aufgerufen werden, da sie zu spät aufgerufen werden. Wenn Sie aufrufen
render(drupal_get_form('my_form'))
, wurde der Code ausgeführt, der die Fehlermeldungen rendert, und die vom Validierungshandler gemeldeten eventuellen Fehlermeldungen werden in der aktuellen Sitzung von drupal_set_message () gespeichert , von dem aus aufgerufen wirdform_set_error()
.Der Code zum Drucken der Fehlermeldung befindet sich in der Datei page.tpl.php .
Der Code, in dem
drupal_set_message()
die anzuzeigenden Nachrichten gespeichert werden, ist der folgende:quelle
form_set_error()
in einer Vorlagendatei der falsche Weg ist. Also, was ist der richtige Weg?drupal_get_form()
sollte nicht in einer Vorlagendatei, sondern in einem Modul aufgerufen werden.Sie sollten stattdessen form_set_error betrachten
Wenn Sie ein Element wie dieses haben:
Führen Sie dies in Ihrer Validierungs-Rückruffunktion aus, wenn Sie feststellen, dass die Werte in
$form_state['values']
nicht gültig sindquelle
form_set_error()
sollte innerhalb Ihrerhook_validate()
Funktion aufgerufen werden, wie von LSU_JBob beantwortet.quelle
hook_validate()
.