【问题标题】:drupal----confused by the argument $form_statedrupal----被参数 $form_state 弄糊涂了
【发布时间】:2010-12-05 02:01:47
【问题描述】:

这是来自 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文档,表单样式的builder是这样的。

function mymodule_myform($form_state) {

}

函数中有一个参数($form_state),我什么时候应该使用这个参数。谢谢。

【问题讨论】:

  • 我不明白你的意思。这是一个参数,不是吗?如何命名($form 和 $form_state 之间的区别)并不重要。
  • Pekka,传递给 system_settings_form() 的 $form 不等同于传递给其他表单构建函数的 $form_state 变量,例如block_add_block_form()。这些变量名称描述了 Drupal 中表单和表单状态之间的实际差异。虽然您是对的,可以使用 2 个变量名来指代同一事物,但这不是这里发生的事情,这也是一种糟糕的编码习惯。

标签: drupal forms drupal-6 drupal-modules


【解决方案1】:

如果您正在寻找 $form 和 $form_state 之间的区别:

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

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

【讨论】:

  • 这是对的,但如果我正确理解了这个问题,这只是答案的一半,这就是为什么表单构建函数将 $form_state 作为它们的第一个参数。
【解决方案2】:

thosewhatnots 在讨论$form 和$form_state 之间的区别时是完全正确的。 $form 定义表单,$form_state 携带有关已处理表单的信息。

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

表单构建函数应始终返回表单定义,但它们可能会根据最后一次单击的按钮、用户提交的值或其他信息等信息来决定表单定义。正如 ceejayoz 在评论中提到的,$form_state 在构建器函数中的常见用途是处理多步骤表单,其中表单的状态(“步骤 1 + 2 完成,步骤 3 尚待执行)有效果在向用户显示的表单上。

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

【讨论】:

  • 我在表单函数中看到$form_state 的一个常见用途是用于多步/ahah_helper 表单,因此它们可以适应表单重建。
  • @ceejayoz -- 这是我在 Drupal 漫游中看到的 $form_state 最常见的用法;我会把它添加到我的答案中。
【解决方案3】:

$form_state 的主要用途是在填写并提交表单后保存表单的值。 $form_state 由验证功能检查,以确保输入的值符合验证要求。然后将相同的$form_state 转发给提交函数,这些函数可以在验证通过后处理该数据(例如,将数据保存到数据库,将某些内容打印到下一页等)。

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

请参阅 Drupal 的 Form Quickstart 了解更多详细信息,尤其是验证和提交部分。

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2019-01-12
    • 1970-01-01
    • 2014-08-14
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2017-07-24
    相关资源
    最近更新 更多