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