drupal_get_formとdrupal_retrieve_formの違いは何ですか?


10

違いは何であるdrupal_get_form()とはdrupal_retrieve_form()?誰かが違いを説明できますか?私はAPIを見ましたが、説明は私に似ているようです。


重要な違いの1つdrupal_retrieve_form()は、コードが$form_state参照によって渡される更新にアクセスできることですが、状態ではなくをdrupal_get_form()返すだけ$formです。
Felix Eve

回答:


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()送信ハンドラを呼び出します。

フォームのレンダリング

レンダリングは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'];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.