Drupal FAPI:验证后在nodeform上添加表单元素

时间:2010-05-22 09:46:23

标签: php validation drupal drupal-6 drupal-fapi

我使用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'=真,因为验证后表单永远不会被hook_form_alter处理。但是我需要hook_form_alter来添加我的附加表单元素。

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

谢谢和欢呼。

3 个答案:

答案 0 :(得分: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()) {

答案 1 :(得分:0)

您确定不会再次调用hook_form_alter,或者您是否只是检查rebuild属性是否为真?

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

答案 2 :(得分:0)

这就是我认为我应该工作的方式。我知道不会在hook_form_alter中设置rebuild标志。但我的问题是,在验证错误后,不会再次调用hook_form_alter。 您是否真的认为这适用于CCK表格,或仅适用于drupal_get_form创建的自有表格?