Drupal 6:在输出表单之前,我可以在哪里访问表单的错误,可能是通过form_get_errors()?

时间:2011-04-27 18:59:04

标签: php drupal-6 drupal-fapi

像往常一样,我认为Drupal表单API中的内容很简单......我在想什么?

问题
我有一个块通过drupal_get_form()输出一个表单。在块的显示功能中,我想检查表单是否验证失败(即在表单的验证函数中有form_set_error()设置的任何错误)。

到目前为止已经尝试过......

  • 在块显示功能中检查$_SESSION['messages']['error'] - 但它们已经消失了
  • 在块显示功能中检查$_POST - 这里没什么用处
  • 检查form_get_errors()中的mymodule_preprocess_page() - 空
  • 检查form_get_errors()中的mytheme_preprocess_page() - 空

我对form_get_errors()为空的电话感到困惑。它调用form_set_error()没有args - 它离开$reset = FALSE,因此保存表单错误的静态var不会被清除。所以我不知道var在哪里被重置 - 某处是另一种形式的api函数? - 所以当我在我的模块或主题中调用它时,它是空的。

帮助吗
那么,有没有人知道在什么时候(预处理函数?)我可以在清除静态var之前调用form_get_errors()?或者有另一个想法如何在显示表单的块中检查表单错误? (顺便说一句 - 我很确定一旦我进入drupal_get_form()调用的函数,我就可以轻松地检查这个...但我需要知道封闭块显示函数中的错误。)

1 个答案:

答案 0 :(得分:0)

这很难看,因为所有人都会离开,但它应该有效。

$form['#validate'][] = '_error_preservation_helper';

...
function _error_preservation_helper($form, &$form_state) {
  $GLOBALS['_error_preservation_helper'] = form_get_error();
  return true;
}