Drupal_get_form ve drupal_retrieve_form arasındaki fark nedir?


10

Arasındaki fark nedir drupal_get_form()ve drupal_retrieve_form()? Birisi farkı açıklayabilir mi? API'ye bakıyorum, ancak açıklama bana benziyor.


Bence önemli bir fark, drupal_retrieve_form()kodunuzun $form_statereferans olarak geçtiği gibi güncellenmiş erişimine izin vermesidir , ancak drupal_get_form()sadece durumu döndürür $form, durumu döndürmez .
Felix Eve

Yanıtlar:


10

Fark, drupal_get_form()modüller için oluşturulmuş bir HTML formunun otomatik olarak alınmasını, işlenmesini ve görüntülenmesini sağlarken drupal_retrieve_form(), bir formu tanımlayan yapılandırılmış diziyi döndürmesidir.

Formu alma

drupal_get_form()ilk önce formun form_get_cache () ile form önbelleğinde olup olmadığını kontrol eder ; yoksa, drupal_retrieve_form () ve drupal_prepare_form () öğesini çağırır .

Formun işlenmesi

drupal_get_form()aramalar drupal_process_form () işlevi, bu çağrılar drupal_validate_form () , ve dayanması ile gönderme yükleyiciler form_execute_handlers () .

Formu oluşturma

Oluşturma işlemi drupal_process_form(), form_builder () öğesini çağıran yapılır .

Çoğu durumda, drupal_get_form()aşağıdaki koddaki gibi kullanılacak işlevdir.

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()Doğrudan çağıran bulduğum tek modül , otomatik olarak bir form göndermek için kullanan mollom_moderate () içindeki Mollom modülüdür . Kod drupal_form_submit () kullanabilir , ancak (yorumda belirtildiği gibi), "Programlı form gönderimleri birincil form gönderme düğmesini / eylemini otomatik olarak kullanamaz, bu yüzden benzememiz gerekir 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'];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.