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.
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.
Câu trả lời:
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.
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 () .
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 () .
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'];
drupal_retrieve_form()
cho phép mã của bạn truy cập vào bản cập nhật$form_state
khi được chuyển qua tham chiếu, tuy nhiêndrupal_get_form()
chỉ cần trả về$form
trạng thái chứ không phải trạng thái.