回答:
違いは、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()で送信ハンドラを呼び出します。
レンダリングはform_builder()drupal_process_form()
を呼び出すから行われます。
ほとんどの場合、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_moderate()の Mollomモジュールだけです。コードは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
です。