Как программно получить входные данные из формы?


Я внедряю hook_form_alter в свой пользовательский модуль и хочу получить все входные данные из переменной $form.

Итак, если, например, есть текстовая область, переключатель и флажок, я хочу захватить эти элементы и поместить их в чистый массив для последующего использования. Что я в основном хочу сделать в будущем, так это создать выпадающий список и использовать эти входные данные в качестве параметров в списке.

Является ли это чистым способом сделать это через FAPI?

 2
Author: Clive, 2012-03-23

3 answers

Вы можете использовать element_children() функция для захвата всех дочерних элементов внутри определенного элемента (включая элемент формы). Проблема с формами Drupal заключается в том, что часто все элементы находятся не на одном уровне массива, поэтому вам нужно будет создать рекурсивную функцию, чтобы получить их все надежно. Это не проверено, но должно дать вам возможность начать:

function _element_children_recursive(&$element) {
  $names = array();

  foreach (element_children($element) as $element_key) {
    $names[] = $element_key;
    $names = array_merge($names, _element_children_recursive($element[$element_key]));
  }

  return $names;
}

$all_element_names = _element_children_recursive($form);

В этом есть еще одно предостережение... поскольку элементы формы могут находиться на разных уровнях, вы вполне можете получить два ключа с одинаковыми именами. Это совершенно справедливо в Drupal, поэтому вы, вероятно, захотите немного проверить рекурсивную функцию, чтобы избежать дубликатов.

 3
Author: Clive, 2012-03-23 19:37:50

Вам нужно представление элементов в формате FAPI или введенные пользователем значения?

Я думаю, что вы спрашиваете о значениях, вводимых пользователем в элементы формы. Они доступны в переменной $form_state['значения'], когда форма была отправлена.

 1
Author: Joe Beuckman, 2012-03-23 04:55:10

Я думаю, что принятый ответ является лучшим, но я хотел бы упомянуть, что вы также можете получить имена полей, выполнив drupal_retrieve_form('form_id', $form_state). Вы получаете массив с именами элементов формы в качестве ключей и массивом атрибутов построения каждого поля в качестве содержимого.

Примечание: вы должны создать манекен $form_state, выполнив $form_state['build_info']['args'] = array();

 0
Author: Eric Johnson, 2017-09-27 14:52:09