2016-07-05 148 views
0

我有一个非常简单的表单,使用createFormBuilder创建,只提供一个简单的文本字段(没有附加到表单的实体)。Symfony 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

这不是服务器端问题。点击刷新时,浏览器会重复上次请求。尝试在地址栏中输入以使用GET请求来刷新它,它会工作。 – Alsatian

回答

0

这正是阿尔萨斯的评论说。浏览器正试图重复上次请求。

但是我认为,一旦你处理了数据,你可以简单地用$ this-> redirectToRoute重定向到相同的路由,当然如果这不是问题的话。

另外我看到你检查至少两次,如果方法发布。如果它不与其他应用程序逻辑冲突,则可以在注释中指定@Method("POST"),这样就不必直接在代码中检查它。

最好的问候, R.