2016-07-05 152 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.