drupal ----由参数$ form_state搞糊涂了

时间:2010-12-05 02:01:48

标签: drupal forms drupal-6 drupal-modules

这是专业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) {

}

funcion中有一个参数($ form_state),当我应该使用这个参数时。谢谢你。

3 个答案:

答案 0 :(得分:4)

如果您正在寻找$ form和$ form_state之间的差异:

$ form是一个包含表单结构的关联数组。它通过诸如hook_form_alter之类的调用进行修改,以添加字段或执行其他操作。

$ form_state是一个包含表单当前状态的键控数组。确切的状态取决于表单所在的节点进程中的哪个阶段。通常,它保存将在表单提交时处理的值。

答案 1 :(得分:2)

在讨论$form$form_state之间的差异时,这些内容完全正确无误。 $form定义表单,$form_state包含有关已处理表单的信息。

那么为什么表单构建函数将$form_state作为第一个参数(以及任意数量的可选用户指定参数)?提供构建表单时可能需要的上下文和状态信息。

表单构建功能应​​始终返回表单定义,但他们可以根据单击的最后一个按钮,用户提交的值或其他信息等信息来决定表单定义。正如ceejayoz在评论中所提到的,$form_state在构建器函数中的常见用法是处理多步形式,其中表单的状态(“步骤1 + 2完成,步骤3仍然要去”)对显示给用户的表单的影响。

在许多常见用例中,$form_state被完全忽略,可选参数用于提供上下文信息(对于许多示例中的一个,请参阅comment_form API文档)。

答案 2 :(得分:2)

$form_state的主要用途是在填写并提交表单后保存表单的值。验证函数检查$form_state以确保输入的值满足验证要求。然后转发相同的$form_state以提交函数,这些函数可以在验证通过后对数据执行操作(例如,将数据保存到数据库,将内容打印到下一页等)。

也就是说,$form_state参数可以包含在任何表单函数中,因为表单可以在提交过程中的任何点加载或重新加载。如果您想要访问表单存储的值,请确保您的函数可以使用$form_state

有关详细信息,请参阅Drupal的Form Quickstart,尤其是验证和提交部分。