drupal ---- сбит с толку аргумент $ form_state - PullRequest
5 голосов
/ 05 декабря 2010

это пример из книги pro drupal.

  function annotate_admin_settings() {

    $options = node_get_types('names');
      $form['annotate_node_types'] = array(

   '#type' => 'checkboxes',

    '#title' => t('Users may annotate these content types'),
    '#options' => $options,
    '#default_value' => variable_get('annotate_node_types', array('page')),
     '#description' => t('A text field will be available on these content types to
     make user-specific notes.'),
    );
    return system_settings_form($form);
   }

, но из документации по drupal строитель стиля такой:

function mymodule_myform($form_state) {

}

естьпараметр ($ form_state) в функции, когда я должен использовать этот параметр. спасибо.

Ответы [ 3 ]

4 голосов
/ 06 декабря 2010

Если вы ищете различия между $ form и $ form_state:

$ form - это ассоциативный массив, содержащий структуру формы.Он изменяется с помощью вызовов типа hook_form_alter для добавления полей или выполнения других действий.

$ form_state - это массив ключей, содержащий текущее состояние формы.Точное состояние зависит от того, на каком этапе процесса узла находится форма. Как правило, оно содержит значения, которые будут обработаны при отправке формы.

2 голосов
/ 19 февраля 2011

Основное использование $form_state состоит в том, чтобы хранить значения формы после того, как она была заполнена и отправлена. $form_state проверяется функциями проверки, чтобы убедиться, что введенные значения соответствуют требованиям проверки. Затем тот же $form_state перенаправляется для отправки функций, которые могут что-то делать с этими данными после того, как проверка прошла успешно (например, сохранить данные в базе данных, распечатать что-нибудь на следующей странице и т. Д.).

Тем не менее, параметр $form_state может быть включен в любую функцию формы, поскольку форма может быть загружена или перезагружена в любой точке процесса отправки. Если вы хотите получить доступ к значениям, сохраненным в вашей форме, убедитесь, что для вашей функции доступен $form_state.

См. Drupal's Form Quickstart для получения более подробной информации, особенно в разделах проверки и отправки.

2 голосов
/ 06 декабря 2010

Теуноутс совершенно правы, когда обсуждают разницу между $form и $form_state. $form определяет форму, $form_state содержит информацию об обработанной форме.

Так почему функции построения форм принимают $form_state в качестве первого аргумента (вместе с любым количеством необязательных, указанных пользователем аргументов)? Предоставить информацию о контексте и состоянии, которая может понадобиться при создании формы.

Функции построения формы всегда должны возвращать определение формы , но они могут принимать решения об определении формы на основе информации, такой как последняя нажатая кнопка, введенные пользователем значения или другая информация. Как упомянуто в комментарии ceejayoz, обычное использование $form_state в функции построителя - это обработка многоэтапных форм, когда состояние формы («шаг 1 + 2 завершен, шаг 3 еще не завершен») в форме, отображаемой для пользователя.

Во многих распространенных случаях использования $form_state полностью игнорируется, а необязательные аргументы используются для предоставления контекстной информации (один из многих примеров см. В документации API comment_form ).

...