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()
.