在Drupal 7
中,我有这段代码。
它将硬编码字符串my_module_custom_route_form
定义为表单ID,并使用drupal_get_form
初始化表单。还有一个提交按钮。
访问此路线/custom_route
,输出
initialize form
如果您提交表单,则输出为
initialize form
submitted
问题是:此表单的提交将再次致电my_module_custom_route_form
。
如何防止在提交时再次调用它?如果你知道为什么Drupal这样做,我也想知道。
function my_module_menu() {
$items = array();
$items['custom_route'] = array(
"page arguments" => array("my_module_custom_route_form"),
"page callback" => "drupal_get_form",
"access callback" => TRUE,
);
return $items;
}
function my_module_custom_route_form($form, &$form_state){
print_r("initialize form");
$form = array();
$form["button"] = array(
"#type" => "submit",
"#value" => "submit"
);
return $form;
}
function my_module_custom_route_form_submit($form, &$form_state){
print_r("<br />submitted");
exit;
}
答案 0 :(得分:0)
我认为你需要的是:
在提交处理程序中设置$ form_state [&#39; redirect&#39;] = false。
请参阅https://drupal.stackexchange.com/questions/26347/prevent-redirect-after-form-submit
希望有所帮助!
答案 1 :(得分:0)
我知道这是一个老问题,但问题仍然相关 - 我遇到了同样的问题。就我而言,这绝对是一个问题,因为块中的表单声明了一个队列项进行处理,但是当第二次调用表单构建器时,当然该项目在队列中被阻塞了。
单击非ajax化表单上的按钮会导致页面重新加载。在块的情况下,这会调用 block_view 函数,该函数从 0 重建表单。
我通过ajaxifying提交按钮解决了这个问题。然后在不重新查看块的情况下调用提交(并重建表单,就像这里的情况一样)。 examples 模块中有一个很好的 ajax_example,适合那些不熟悉 ajax 表单的人。