¿Cuál es la diferencia entre drupal_get_form()
y drupal_retrieve_form()
? ¿Alguien puede explicar la diferencia? Miro la API, pero la descripción me parece similar.
10
¿Cuál es la diferencia entre drupal_get_form()
y drupal_retrieve_form()
? ¿Alguien puede explicar la diferencia? Miro la API, pero la descripción me parece similar.
drupal_retrieve_form()
permite que su código acceda a la actualización a$form_state
medida que se pasa por referencia, sin embargo,drupal_get_form()
solo devuelve el estado$form
, no el estado.Respuestas:
La diferencia es que
drupal_get_form()
maneja la recuperación, el procesamiento y la visualización automática de un formulario HTML representado para los módulos, mientras quedrupal_retrieve_form()
devuelve la matriz estructurada que define un formulario.Recuperando el formulario
drupal_get_form()
primero comprueba si el formulario está presente en el caché del formulario con form_get_cache () ; si no está presente, llama a drupal_retrieve_form () y drupal_prepare_form () .Procesando el formulario
drupal_get_form()
llama a drupal_process_form () , que es la función que llama a drupal_validate_form () , y que invoca los manejadores de envío con form_execute_handlers () .Renderizando el formulario
La representación se realiza desde
drupal_process_form()
, que llama a form_builder () .En la mayoría de los casos,
drupal_get_form()
es la función a utilizar, como en el siguiente código.El único módulo que encontré que está llamando
drupal_retrieve_form()
directamente es el módulo Mollom en mollom_moderate () , que lo usa para enviar automáticamente un formulario. El código podría usar drupal_form_submit () , pero (como dice un comentario), "los envíos de formularios programáticos no pueden usar automáticamente el botón / acción de envío del formulario principal, por lo que debemos asemejarnosdrupal_form_submit()
".fuente