1

我使用 Drupal 6.x。在我自己的模块中,我更改每个节点的形式,并使用添加我自己的验证处理程序

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

然后我有这个功能

function my_own_validation_function($form, &$form_state)
{
  //if validation fails, i would like to rebuild the form to add additional form elements in hook_form_alter
  $form_state['rebuild'] = True;
}

我的问题是,验证函数不尊重我的 'rebuild' = True 因为表单在验证后从未被 hook_form_alter 处理。但我需要 hook_form_alter 来添加我的额外表单元素。

我的问题有解决方案吗?或者即使我将 &$form_state 设置为“指针”,是否不尊重自己的验证处理程序中的 form_state 更改?

谢谢和欢呼。

4

3 回答 3

1

好的,现在我明白了!一切都很好,但有一个错误:在我自己的验证处理程序中,我设置了 form_set_error,如果有错误,并且 $form_state['rebuild'] = true,则函数 drupal_get_form 将不会重建表单,直到没有表单错误。我在 form.inc 第 141 行找到它

if ((!empty($form_state['storage']) || !empty($form_state['rebuild'])) && !empty($form_state['submitted']) && !form_get_errors()) {
于 2010-05-26T16:04:16.933 回答
0

你确定你hook_form_alter的没有被再次调用,或者你可能只是在rebuild那里检查属性是否真实?

IIRC,您的方法是正确的 -$form_state['rebuild'] = True验证期间的设置应该会导致表单重建。但通常人们会设置一个额外的“指针”(例如$form_state['myModule_rebuild_indicator'] = TRUE并检查它hook_form_alter(“重建”属性将在该点再次为假)。

于 2010-05-23T11:29:31.263 回答
0

这也是我认为我应该工作的方式。我知道在 hook_form_alter 中不会设置重建标志。但我的问题是,在验证错误后没有再次调用 hook_form_alter。你确定这适用于 CCK 表单 true 还是仅适用于 drupal_get_form 创建的自己的表单?

于 2010-05-24T15:46:44.637 回答