我正在尝试重置一个表单,以便Drupal 8看来它尚未提交。到目前为止,我一直无法做到这一点,因为我找不到任何可用的方法(setSubmitted()硬编码为TRUE而没有FALSE选项)。原因是这不是一个完整的提交,而是一个字段的提交,之后我希望用户被重定向到另一个具有另一个表单的页面,我希望这个二级表单使用第一个获得的值步骤
在第一部分的提交处理程序中,我使用它来重定向:
$form_state->setRedirect('my.route', [], []);
这样可行,但当表单到达第二种形式(似乎)时,第二种形式认为它是提交。因此,我添加到第二个表单的任何提交按钮似乎都会自动提交,这会破坏我的用户旅程。
在第一部分的提交中,我尝试过:
$form_state->setRebuild(TRUE);
$form_state = new FormState();
unset($form_state);
尝试上述各种配置无济于事。它们都会阻止/忽略我之后创建的setRedirect调用。我想/需要这样做的原因是我想保留使用的POST方法。
答案 0 :(得分:0)
您想获得类似核心搜索模块的功能吗?它有简单的SearchBlockForm
,可以将数据发送到更复杂的SearchPageForm
。
SearchBlockForm
使用GET
方法(尽管您可以使用POST
):
$form['#method'] = 'get';
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;
}
顺便说一下,最后一次更改可以避免运行提交回调。
希望这有帮助。