在提交处理程序中删除提交的状

时间:2017-10-30 09:51:04

标签: forms drupal drupal-8

我正在尝试重置一个表单,以便Drupal 8看来它尚未提交。到目前为止,我一直无法做到这一点,因为我找不到任何可用的方法(setSubmitted()硬编码为TRUE而没有FALSE选项)。原因是这不是一个完整的提交,而是一个字段的提交,之后我希望用户被重定向到另一个具有另一个表单的页面,我希望这个二级表单使用第一个获得的值步骤

在第一部分的提交处理程序中,我使用它来重定向:

$form_state->setRedirect('my.route', [], []);

这样可行,但当表单到达第二种形式(似乎)时,第二种形式认为它是提交。因此,我添加到第二个表单的任何提交按钮似乎都会自动提交,这会破坏我的用户旅程。

在第一部分的提交中,我尝试过:

$form_state->setRebuild(TRUE);
$form_state = new FormState();
unset($form_state);

尝试上述各种配置无济于事。它们都会阻止/忽略我之后创建的setRedirect调用。我想/需要这样做的原因是我想保留使用的POST方法。

1 个答案:

答案 0 :(得分:0)

您想获得类似核心搜索模块的功能吗?它有简单的SearchBlockForm,可以将数据发送到更复杂的SearchPageForm

SearchBlockForm使用GET方法(尽管您可以使用POST):

$form['#method'] = 'get';

has no id and token fields

function search_form_search_block_form_alter(&$form, FormStateInterface $form_state) {
  $form['form_build_id']['#access'] = FALSE;
  $form['form_token']['#access'] = FALSE;
  $form['form_id']['#access'] = FALSE;
}
顺便说一下,最后一次更改可以避免运行提交回调。

希望这有帮助。