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 ()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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.