Qual é a diferença entre drupal_get_form()
e drupal_retrieve_form()
? Alguém pode explicar a diferença? Eu olho para a API, mas a descrição parece semelhante a mim.
10
Qual é a diferença entre drupal_get_form()
e drupal_retrieve_form()
? Alguém pode explicar a diferença? Eu olho para a API, mas a descrição parece semelhante a mim.
drupal_retrieve_form()
permite que seu código acesse a atualização$form_state
conforme é passada por referência; no entanto,drupal_get_form()
basta retornar o$form
, não o estado.Respostas:
A diferença é que
drupal_get_form()
lida com a recuperação, o processamento e a exibição automática de um formulário HTML renderizado para módulos, enquantodrupal_retrieve_form()
retorna a matriz estruturada que define um formulário.Recuperando o formulário
drupal_get_form()
primeiro verifica se o formulário está presente no cache do formulário com form_get_cache () ; se não estiver presente, chama drupal_retrieve_form () e drupal_prepare_form () .Processando o formulário
drupal_get_form()
chama drupal_process_form () , que é a função que chama drupal_validate_form () e chama os manipuladores de envio com form_execute_handlers () .Renderizando o formulário
A renderização é feita a partir de
drupal_process_form()
, que chama form_builder () .Na maioria dos casos,
drupal_get_form()
é a função a ser usada, como no código a seguir.O único módulo que encontrei que está chamando
drupal_retrieve_form()
diretamente é o módulo Mollom em mollom_moderate () , que o utiliza para enviar automaticamente um formulário. O código pode usar drupal_form_submit () , mas (como diz um comentário), "Os envios de formulário programáticos não podem usar automaticamente o botão / ação de envio de formulário primário, por isso precisamos parecerdrupal_form_submit()
."fonte