No meu módulo Drupal 7, eu tenho um formulário e seus manipuladores de validação. Eu chamo meu formulário de um field.tpl.php com print render(drupal_get_form('my_form'))
; funciona como esperado.
O problema está no caso de um valor de entrada incorreto.
Requer dois envios incorretos antes de exibir a mensagem de erro: Na primeira vez, há uma borda vermelha ao redor da minha entrada incorreta e, na segunda vez, a mensagem de erro é exibida (com a borda vermelha).
Então, qual é a maneira correta de usar form_set_error()
?
drupal_set_error()
função. Tem certeza de que não quis dizer issoform_set_error()
?Respostas:
Os construtores de formulários não devem ser chamados dentro de um arquivo de modelo, pois estão sendo chamados tarde demais. Quando você está chamando
render(drupal_get_form('my_form'))
, o código que renderiza as mensagens de erro foi executado e as mensagens de erro eventuais relatadas pelo manipulador de validação são salvas na sessão atual de drupal_set_message () , que é chamado deform_set_error()
.O código para imprimir a mensagem de erro está no arquivo page.tpl.php .
O código
drupal_set_message()
que salva as mensagens a serem exibidas é o seguinte:fonte
form_set_error()
um arquivo de modelo é o caminho errado. Então, qual é o caminho certo?drupal_get_form()
não deve ser chamado dentro de um arquivo de modelo, mas dentro de um módulo.Você deve estar olhando para form_set_error vez
se você tiver um elemento como este:
na sua função de retorno de chamada de validação, faça isso se você achar que os valores
$form_state['values']
não são válidosfonte
form_set_error()
deve ser chamado dentro de suahook_validate()
função, conforme respondido por LSU_JBob.fonte
hook_validate()
.