防止在提交时再次调用Drupal表单?

时间:2016-10-27 15:23:00

标签: drupal-7 drupal-forms

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;
}

2 个答案:

答案 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 表单的人。