删除提交处理程序中的已提交状态



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

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

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

这是有效的,但当表格到达第二表格时(似乎),第二表格认为这是一个提交。因此,我在第二个表单中添加的任何提交按钮似乎都会使其自动提交,这会中断我的用户旅程。

在提交的第一部分我已经尝试:

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

在各种配置中尝试了上述操作,但均无效。它们都阻止/忽略我之后进行的setRedirect调用。我想/需要这样做的原因是我想保留所使用的POST方法。

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

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

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

并且没有id和token字段:

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

顺便说一句,最后的更改允许您避免运行提交回调。

希望这能有所帮助。

最新更新