En mi módulo Drupal 7, tengo un formulario y sus controladores de validación. Llamo a mi formulario desde un field.tpl.php con print render(drupal_get_form('my_form')); Funciona como se esperaba.
El problema es en caso de un valor de entrada incorrecto.
Requiere dos envíos incorrectos antes de mostrar el mensaje de error: la primera vez, hay un borde rojo alrededor de mi entrada incorrecta, y la segunda vez, se muestra el mensaje de error (con el borde rojo).
Entonces, ¿cuál es la forma correcta de usar form_set_error()?

drupal_set_error()función ¿Estás seguro de que no quisiste decirform_set_error()?Respuestas:
Se supone que los creadores de formularios no deben llamarse dentro de un archivo de plantilla, ya que se llaman demasiado tarde. Cuando está llamando
render(drupal_get_form('my_form')), el código que representa los mensajes de error se ha ejecutado, y los mensajes de error eventuales informados desde el controlador de validación se guardan en la sesión actual desde drupal_set_message () , que se llama desdeform_set_error().El código para imprimir el mensaje de error está en el archivo page.tpl.php .
El código
drupal_set_message()que guarda los mensajes para mostrar es el siguiente:fuente
form_set_error()un archivo de plantilla es la manera incorrecta. Entonces, ¿cuál es la forma correcta?drupal_get_form()no debe llamarse dentro de un archivo de plantilla, sino dentro de un módulo.Deberías mirar form_set_error en su lugar
si tienes un elemento como este:
en su función de devolución de llamada de validación, haga esto si encuentra que los valores en
$form_state['values']no son válidosfuente
form_set_error()debe llamarse dentro de suhook_validate()función como lo responde LSU_JBob.fuente
hook_validate().