Symfony2

Symfony2 Formではまったこと

(はてブロからの転記です)

登録・確認・完了っていう画面を作りたかったです。
が。Actionの分け方がまずったらしく、つい癖で、ActionをInputとConfirmとCompleteと作ったんだけど、一つのActionでヨロと言われた。確かに調べてるとそんな感じのが多いのでそのあたりは右に倣う。

しかし、確認画面の作り方がよくわからない。と、いうかTwigでどう書くの??

今回は取り急ぎで動かしたかったので、Entityは省略

Controller側

public function caseAction(Request $request)
{
    $formFactory = Forms::createFormFactoryBuilder()
        ->addExtension(new HttpFoundationExtension())
        ->getFormFactory();

    // formを作って、taskという変数にtextという文字列をbindしている(多分)
    $form = $formFactory->createBuilder()
        ->add('task', 'text')
        ->getForm();

        // 確認画面(POSTで来た)
    if ($request->getMethod() == 'POST') {
        $form->bind($request);
                // 確認画面の表示
         return $this->render('SpBundle:Inquire:confirm.html.twig',
                array('data' => $form->getData(),
          ));
    }

        // 入力画面の表示(GETで来た)
    return $this->render('SpBundle:Inquire:input.html.twig', array(
            'form' => $form->createView(),
    ));
}

Twig側(confirm.html.twig)
{{ data.task }}

これでいいらしい。今回はとりあえず表示されればOK。登録は別API使うからDctrineは関係しません。最初、bindRequestでエラーになってbindに変えました。2.3と2.0でどっちがどっちに変わったか忘れてたw

あ、ついでに…routingの設定で。

      requirements: 
       _method: POST|GET

これ忘れずに。忘れてエラーになった。
GET:入力画面
POST:確認画面

hiddenで値持たせておきたいときは、ControllerからTwigに渡す引数に「form」を追加して
{{ form_widget(form.task, {type: 'hidden'}) }}

こんな感じで。
(上のController、completeがない、ないぞ。どういうことだ)