drupal_get_form과 drupal_retrieve_form의 차이점은 무엇입니까?


10

차이점은 무엇이며 drupal_get_form()그리고 drupal_retrieve_form()? 누군가 차이점을 설명 할 수 있습니까? API를 보았지만 설명은 나와 비슷합니다.


한 가지 중요한 차이점은 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.