ความแตกต่างระหว่าง drupal_get_form และ drupal_retrieve_form คืออะไร


10

ความแตกต่างระหว่างdrupal_get_form()และdrupal_retrieve_form()คืออะไร? มีคนอธิบายความแตกต่างได้ไหม ฉันดู API แต่คำอธิบายนั้นคล้ายกับฉัน


ฉันคิดว่าความแตกต่างที่สำคัญอย่างหนึ่งคือการที่drupal_retrieve_form()อนุญาตให้รหัสของคุณเข้าถึงการอัปเดต$form_stateเมื่อผ่านการอ้างอิง แต่drupal_get_form()เพียงคืนค่า$formไม่ใช่สถานะ
เฟลิกซ์อีฟ

คำตอบ:


10

ความแตกต่างคือการ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'];
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.