2017-01-28 10 views
0

私はこのフォームFormを含むページindex.html.twigを持っています。これは検証され、結果はページsuccess.html.twigに表示されます。今度は、success.html.twigページにindex.html.twigからフォームによって渡された値を含むフォームが含まれている新しい要件があります。ユーザーが新しいフォームを希望する場合は、ユーザーがsuccess.twig.htmlから直接検索できるようにする必要があります。要件は、hostel worldからインスピレーションを受けています。symfonyの別のコントローラーにフォームを送信

質問

  1. 私は私の現在の考え方がsuccess.html.twigのための新しいアクションを作成し、thatActionにフォームを送信する代わりにレンダリングすることで解決
  2. を実装するために使用できるデザインパターンがありますsuccess.html.twigからindex.html.twigさんの処置。それが正しいか?どのように実装できますか?

コード(部分)

/** 
* @Route("/", name="homepage") 
*/ 
public function indexAction(Request $request) 
{ 
    $event = new Event(); 
    $form = $this->createForm(MyForm::class, $event); 
    $form->handleRequest($request); 

    if($form->isSubmitted() && $form->isValid()) { 
     $event->setPlace($form["place"]->getData()); 


     $event->setDate($form["date"]->getData()->modify('+12 hours')); 
     return $this->render('default/frontend/success.html.twig', 
      array('events' => $events, 'cityName' => $cityName, 'cityImage' => $cityImage) 
     ); 
    } 

    return $this->render('default/frontend/index.html.twig', array('form' => $form->createView())); 
} 
+0

私は成功のための新しいアクションを作成するのが正しいと思います。フォームの作成時には、$ form = $ this-> createForm(new Event()、$ event); 'を試すことができます。そこで、新しいフォームに 'indexAction'から受け取った値を入力します。 – mickdev

答えて

0

これは、2つの異なるアクションを持つことが理にかなっている - 少なくとも異なる要求タイプのために(など、POSTをGET)。

アドバイスとして、$ form-> isValid()には既にisSubmitted() - 内部チェックがあります。だから、それが提出されているかどうかを確認する必要はありません。

+0

しかし、現在index.html.twigのアクションは、フォームの送信後にsuccess.html.twigをレンダリングします。作成したsuccess.html.twigのアクションをどのように呼び出すことができますか?現在のところsuccess.html.twigのアクションはありません – user6368518

+0

投稿していないフォームに対して 'isValid()'を呼び出すことは、Symfony 4.0以降ではサポートされなくなることにご注意ください(https://github.com/symfony/symfony/blobを参照)。 /master/UPGRADE-3.2.md#form)。だから最初に 'isSubmitted()'を呼び出すのは正しい方法です。 – xabbuh

+0

あなたのフォームには、特定のアクションを使用してリクエストを送信することができます。デフォルトは同じアクションです。 $ this-> createForm( MyForm ::クラス、 $イベント、 $オプション ); $ optionsは['action' => '/ some/other/url or route'、 'method' => 'POST'] アドバイスのために@xabbuh thxはわかりませんでした。 –

関連する問題