提交后,Symfony表格重置

时间:2016-07-05 19:30:40

标签: symfony-forms symfony formbuilder

我有一个使用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

1 个答案:

答案 0 :(得分:0)

这正是阿尔萨斯在评论中所说的。浏览器正在尝试重复上一次请求。

但是我认为,一旦处理了数据,您可以简单地使用$ this-> redirectToRoute重定向到相同的路线,而不是破坏此表单,当然,如果它不是问题。

如果方法发布,我也会看到你至少检查两次。如果它没有与您的应用程序逻辑的其余部分发生冲突,您可以在注释中指定@Method("POST"),这样您就不必再直接在代码中进行检查。

最诚挚的问候, R上。