【问题标题】:Prevent Drupal form from being called again on submit?防止在提交时再次调用 Drupal 表单?
【发布时间】:2016-10-27 15:22:59
【问题描述】:

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

【问题讨论】:

    标签: drupal-7 drupal-forms


    【解决方案1】:

    我想你需要的是这样的:

    在提交处理程序中设置 $form_state['redirect'] = false。

    https://drupal.stackexchange.com/questions/26347/prevent-redirect-after-form-submit

    希望有帮助!

    【讨论】:

    • 嗨,试过了,没用。输出“初始化表单”出现在“提交”之前。所以它不是在重定向之后打印,而是在运行“提交”函数之前打印。这就是问题所在。
    【解决方案2】:

    我知道这是一个老问题,但问题仍然相关 - 我遇到了同样的问题。在我的情况下,这绝对是个问题,因为块中的表单要求处理队列项,但是当第二次调用表单构建器时,该项目当然被阻塞在队列中。

    单击非 ajaxified 表单上的按钮会导致页面重新加载。在块的情况下,这将调用 block_view 函数,该函数从 0 重建表单。

    我通过 ajaxifying 提交按钮解决了这个问题。然后在不重新查看块的情况下调用提交(并重建表单,就像这里的情况一样)。示例模块中有一个不错的 ajax_example,适合那些不熟悉 ajax 表单的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多