我使用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更改是否也未得到尊重?
谢谢和欢呼。
答案 0 :(得分:1)
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创建的自有表格?