【问题标题】:Drupal Module Development: How to Communicate between form_submit and page handler functionsDrupal 模块开发:如何在 form_submit 和页面处理函数之间进行通信
【发布时间】:2011-02-15 04:35:54
【问题描述】:

我正在编写一个模块,我需要从页面处理函数中检索 form_submit 函数中设置的值。原因是我在与页面处理程序相同的页面上呈现表单提交的结果。

我有这个工作,但我正在使用我不喜欢的全局变量。我希望能够为此使用 $form_state['storage'],但不能,因为我无法从页面处理程序访问 $form_state 变量。

有什么建议吗?

【问题讨论】:

  • 关于 Drupal 的问题也可以访问 drupal.stackexchange.com。

标签: forms drupal module drupal-fapi


【解决方案1】:

回复:Drupal: How to Render Results of Form on Same Page as Form

您无权访问页面处理程序中的 $form_state,但我认为您的表单构建器功能可能会自动使用它。看看你能不能用类似的东西把它扔掉

function _ncbi_subsites_show_paths_form($form_state) {
  dsm($form_state);
 // everything else
}

另一种可能性,虽然不比使用全局变量好多少,但是使用 Drupal 的 variable_set() 和 variable_get 函数。

如果您只处理单个值,则可以将其作为 URL 参数从提交处理程序中的 $form['#redirect'] 传递到页面。

【讨论】:

  • 几个好主意。我会尝试其中的一些。令我惊讶的是,这不是一个常见的需求。我的理解是,您可以: 1) 从 hook_menu() 的实现直接将用户发送到表单,将 drupal_get_form() 作为回调发送,并将表单构建函数的名称作为参数发送。 2) 使用从 hook_menu 传递页面处理程序并从该函数中调用 drupal_get_form。这不是通过将字符串连接到 drupal_get_form 的输出来使用表单输出其他内容的唯一方法吗?在我看来,您经常希望页面处理程序与表单进行通信。
  • 您需要页面处理程序来处理表单什么?您可以使用 drupal_get_form() 发送任意数量的附加参数,您只需要将第一个参数作为表单 ID。
猜你喜欢
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多