ความแตกต่างระหว่างdrupal_get_form()
และdrupal_retrieve_form()
คืออะไร? มีคนอธิบายความแตกต่างได้ไหม ฉันดู API แต่คำอธิบายนั้นคล้ายกับฉัน
ความแตกต่างระหว่างdrupal_get_form()
และdrupal_retrieve_form()
คืออะไร? มีคนอธิบายความแตกต่างได้ไหม ฉันดู API แต่คำอธิบายนั้นคล้ายกับฉัน
คำตอบ:
ความแตกต่างคือการdrupal_get_form()
จัดการการดึงการประมวลผลและการแสดงรูปแบบ HTML ที่แสดงผลสำหรับโมดูลโดยอัตโนมัติในขณะที่drupal_retrieve_form()
ส่งกลับอาร์เรย์ที่มีโครงสร้างที่กำหนดรูปแบบ
drupal_get_form()
ก่อนอื่นตรวจสอบว่าฟอร์มนั้นมีอยู่ในแคชฟอร์มด้วยform_get_cache () ; ถ้ามันไม่ได้ปัจจุบันก็เรียกdrupal_retrieve_form ()และdrupal_prepare_form ()
drupal_get_form()
โทรdrupal_process_form ()ซึ่งเป็นฟังก์ชั่นที่โทรdrupal_validate_form ()และที่เรียกไสส่งด้วยform_execute_handlers ()
การแสดงผลจะทำจากdrupal_process_form()
ที่โทรform_builder ()
ในกรณีส่วนใหญ่drupal_get_form()
เป็นฟังก์ชั่นที่ใช้เช่นในรหัสต่อไปนี้
function node_menu() {
$items['admin/content'] = array(
'title' => 'Content',
'description' => 'Find and manage content.',
'page callback' => 'drupal_get_form',
'page arguments' => array('node_admin_content'),
'access arguments' => array('access content overview'),
'weight' => -10,
'file' => 'node.admin.inc',
);
// …
return $items;
}
โมดูลเดียวที่ฉันพบว่ากำลังโทรdrupal_retrieve_form()
โดยตรงคือโมดูล Mollom ในmollom_moderate ()ซึ่งใช้สำหรับการส่งแบบฟอร์มโดยอัตโนมัติ รหัสสามารถใช้drupal_form_submit ()แต่ (ตามความคิดเห็นบอกว่า) "การส่งแบบฟอร์มโดยทางโปรแกรมไม่สามารถใช้ปุ่ม / การส่งแบบฟอร์มหลักโดยอัตโนมัติดังนั้นเราจึงจำเป็นต้องมีลักษณะเหมือนdrupal_form_submit()
กัน"
$form_id = $form_info['delete form'];
$form_state = form_state_defaults();
// We assume that all delete confirmation forms take the fully loaded
// entity as (only) argument.
$messages[] = "Attempt to load $form_info[entity] entity via entity_load().";
$entities = entity_load($data->entity, array($data->id));
$form_state['build_info']['args'][] = $entities[$data->id];
$form = drupal_retrieve_form($form_id, $form_state);
$form_state['values'] = array();
$form_state['values']['mollom']['feedback'] = '';
// Take over the primary submit button of confirm_form().
$form_state['values']['op'] = $form['actions']['submit']['#value'];
$form_state['input'] = $form_state['values'];
$form_state['programmed'] = TRUE;
// Programmed forms are always submitted.
$form_state['submitted'] = TRUE;
// Reset form validation.
$form_state['must_validate'] = TRUE;
form_clear_error();
drupal_prepare_form($form_id, $form, $form_state);
drupal_process_form($form_id, $form, $form_state);
$result = $form_state['executed'];
drupal_retrieve_form()
อนุญาตให้รหัสของคุณเข้าถึงการอัปเดต$form_state
เมื่อผ่านการอ้างอิง แต่drupal_get_form()
เพียงคืนค่า$form
ไม่ใช่สถานะ