Sự khác biệt giữa drupal_get_form và drupal_retrieve_form là gì?


10

Sự khác biệt giữa drupal_get_form()và là drupal_retrieve_form()gì? Ai đó có thể giải thích sự khác biệt? Tôi nhìn vào API, nhưng mô tả có vẻ giống tôi.


Tôi nghĩ rằng một điểm khác biệt chính là drupal_retrieve_form()cho phép mã của bạn truy cập vào bản cập nhật $form_statekhi được chuyển qua tham chiếu, tuy nhiên drupal_get_form()chỉ cần trả về $formtrạng thái chứ không phải trạng thái.
— Felix đêm

Câu trả lời:


10

Sự khác biệt là tự động drupal_get_form()xử lý truy xuất, xử lý và hiển thị biểu mẫu HTML được hiển thị cho các mô-đun, trong khi drupal_retrieve_form()trả về mảng có cấu trúc xác định biểu mẫu.

Lấy mẫu

drupal_get_form()kiểm tra đầu tiên nếu các hình thức hiện diện trong bộ nhớ cache hình thức với form_get_cache () ; nếu nó không có mặt, nó gọi drupal_retrieve_form () và drupal_prepare_form () .

Xử lý mẫu

drupal_get_form()gọi drupal_ process_form () , là hàm gọi drupal_validate_form () và gọi trình xử lý đệ trình với form_execute_handlers () .

Kết xuất biểu mẫu

Việc kết xuất được thực hiện từ drupal_process_form()đó, gọi form_builder () .

Trong hầu hết các trường hợp, drupal_get_form()là hàm để sử dụng, chẳng hạn như trong đoạn mã sau.

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;
}

Mô-đun duy nhất tôi thấy đang gọi drupal_retrieve_form()trực tiếp là mô-đun Mollom trong mollom_mod Cả () , sử dụng mô-đun này để tự động gửi biểu mẫu. Mã có thể sử dụng drupal_form_submit () , nhưng (như một nhận xét nói), "Việc gửi biểu mẫu lập trình không thể tự động sử dụng nút / hành động gửi biểu mẫu chính, vì vậy chúng tôi cần phải giống nhau 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'];
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.