2016-07-05 10 views
0

私は非常にシンプルなフォームをcreateFormBuilderで作成し、単純なテキストフィールドを1つだけ提供します(フォームにエンティティが添付されていません)。提出後のsymfonyフォームのリセット

フォームを送信するときに、フォームを提出した後にリセットしたい場合は、ロジックを行い、フォームとフォームデータの設定を解除してください。

単純なAjaxリクエストでは、フォーム自体に触れたり、ページを再読み込みしたりすることなく、主にUIの一部を開始するアクションが追加されています。

フォームが明らかにリセットされたくないことを除いて、すべてうまくいきます - 意味:ブラウザのページリロードボタンが押されるたびに、フォームを再度送信するかどうか尋ねる標準ブラウザダイアログが表示されます。最後のレンダーコールがサブミットされる前に入力した最後の値を実行すると、

テンプレートkw.html.twigは簡単です。主に、フォームのレンダリングにUIを使用し、ajaxを処理するためのビットjqueryを使用します。特別なものはありません。

私はこれがなぜ起こっているのか分かりません - 私はちょうどどんな要求でもクリーンなフォームがほしいです。私は以下のサンプルコードのようなものを解除するときに私が得たと思った。

/** 
* @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); 
} 

ご協力いただきありがとうございます。

EDIT:symfonyの3.1

+0

。最新の情報をクリックすると、ブラウザは最後のリクエストを繰り返します。アドレスバーに入力を促してGETリクエストでリフレッシュしてみると、うまく動作します。 – Alsatian

答えて

0

を使用することは、アルザスのコメントで言ったまさにです。ブラウザが最後のリクエストを繰り返そうとしています。

しかし、このフォームを破棄するのではなく、問題がなければ、データを処理した後、このルートを$ this-> redirectToRouteで簡単にリダイレクトすることができます。

また、方法が投稿の場合は、少なくとも2回確認します。アプリケーションロジックの他の部分と衝突しない場合は、アノテーションに@Method("POST")を指定して、コード内で直接チェックする必要はありません。サーバ側の問題ではありません

よろしく、 R.

関連する問題