我有一个使用createFormBuilder创建的非常简单的表单,只提供一个简单的文本字段(没有附加到表单的实体)。
提交表单时,如果您希望在提交后重置表单,我会执行一些逻辑,然后按照本主题的许多帖子中的建议取消设置form和formData。
简单的ajax-requests有一些额外的动作,主要是启动一些UI的东西 - 不接触表单本身,也不重新加载页面。
一切正常,只是表单显然不想重置 - 意思是:每当按下浏览器中的页面重新加载按钮时,就会出现标准浏览器对话框,询问您是否要再次提交表单。当你在最后一次渲染调用提交之前输入的最后一个值时。
模板kw.html.twig很简单 - 主要是一些UI填充表单呈现和一些jquery来处理ajax。没什么特别的。
我无法弄清楚为什么会发生这种情况 - 我只想要一个干净的表格。当我在下面的示例代码中解开时,我认为我得到了这个。
/**
* @Route("/kw", name="show_kw")
*/
public function showKwAction(Request $request)
{
if($request->isXmlHttpRequest()) {
if( $request->getMethod() == 'POST' ) {
// do some logic...
return $this->json(array('kw_success' => true));
}
}
$kwData = array();
$kwForm = $this->createFormBuilder($kwData)
->add('kd', TextType::class)
->getForm();
if( $request->isMethod('POST') ) {
$kwForm->handleRequest($request);
$formData = $kwForm->getData();
// do some logic with formData...
unset($kwData);
unset($kwForm);
$kwData = array();
$kwForm = $this->createFormBuilder($kwData)
->add('kd', TextType::class)
->getForm();
}
$templateData = array(
'kwForm' => $kwForm->createView()
);
return $this->render(':backend:kw.html.twig', $templateData);
}
非常感谢任何帮助。
编辑:使用Symfony 3.1
答案 0 :(得分:0)
这正是阿尔萨斯在评论中所说的。浏览器正在尝试重复上一次请求。
但是我认为,一旦处理了数据,您可以简单地使用$ this-> redirectToRoute重定向到相同的路线,而不是破坏此表单,当然,如果它不是问题。
如果方法发布,我也会看到你至少检查两次。如果它没有与您的应用程序逻辑的其余部分发生冲突,您可以在注释中指定@Method("POST")
,这样您就不必再直接在代码中进行检查。
最诚挚的问候, R上。