如何在FAPI函数之外获取$ form_state?

时间:2010-04-14 23:12:11

标签: php drupal forms drupal-6 module

我正在编写一个自定义模块,我想在另一个非形式的api函数中使用当前表单的$ form_state - > custom_facet_view_build()。

感谢任何帮助:)

<?php
/**
 * Implementation of hook_perm().
 */
function custom_facet_perm() {
  return array(
    'access foo content',
    'access baz content',
  );
}

/**
 * Implementation of hook_menu().
 */
function custom_facet_menu() {
  $items['faceted-search'] = array(
    'title' => 'Faceted Search',
    'page callback'    => 'drupal_get_form',
    'access arguments' => array(),
  );

  $items['facet-search-test'] = array(
    'page callback'    => 'drupal_get_form',
    'page arguments'   => array('custom_facet_form'),
    'access callback'  => TRUE,
    'type'             => MENU_CALLBACK,
  );

  return $items;
}

/**
 * Form definition; ahah_helper_demo form.
 */
function custom_facet_form($form_state) {
  $form = array();

  ahah_helper_register($form, $form_state);

  if (isset($form_state['storage']['categories'])) {
    $categories_default_value = $form_state['storage']['categories']["#value"];
  }

  $form['facet_search_form'] = array(
    '#type'   => 'fieldset',
    '#title'  => t('Faceted Search'),
    '#prefix' => '<div id="billing-info-wrapper">', // This is our wrapper div.
    '#suffix' => '</div>',
    '#tree'   => TRUE, // Don't forget to set #tree!
  );

  $form['facet_search_form']['categories'] = array(
    '#type' => 'select',
    '#title' => t('Category'),
    '#options' => _custom_facet_taxonomy_query(1),
    '#multiple' => TRUE,
    '#default_value' => $categories_default_value,
  );

  $form['save'] = array(
    '#type'  => 'submit',
    '#value' => t('Save'),
  );

  return $form;
}

/**
 * Validate callback for the form.
 */
function custom_facet_form_validate($form, &$form_state) {

}

/**
 * Submit callback for the form.
 */
function custom_facet_form_submit($form, &$form_state) {
  drupal_set_message('nothing done');
  $form_state['storage']['categories'] = $form['facet_search_form']['categories'];
  // dpm($form_state); // There's a value returned in form_state['storage] within this function
}

/**
 * Implementation of hook_views_api().
 */
function custom_facet_views_api() {
  return array(
    'api' => 2,
  );
}

function custom_facet_view_build(&$view) {
    dpm($form_state); // form_state['storage] remains NULL even though there's a value on previous submission
}

2 个答案:

答案 0 :(得分:2)

PHP函数不知道其他函数中的变量。

如果在同一个请求周期中调用这些函数,则可以将$ form_state变量存储在全局变量中。否则,您需要将变量存储在db中。这就是HTTP的痛苦,这是一个无国籍系统。

答案 1 :(得分:1)

试试这个:

 $form_state = form_state_defaults();
 $form_build_id = $_POST['form_build_id'];
 // Get the form from the cache.
 $form = form_get_cache($form_build_id, $form_state);

或提供表单ID:

信用:https://drupal.stackexchange.com/questions/158408/how-do-i-load-the-form-state-for-a-form-loaded-with-drupal-get-form/175884#175884

// Get the form.
$form = drupal_get_form('my_form_id');
// Get the default form state.
$form_state = form_state_defaults();
// Get the form and form state from the cache for the form you just got.
form_get_cache($form['#build_id'], $form_state);