LoginSignup
3
2

More than 5 years have passed since last update.

Symfony2 Formではまったこと

Last updated at Posted at 2017-10-26

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

登録・確認・完了っていう画面を作りたかったです。
が。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がない、ないぞ。どういうことだ)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2