Symfony2でフォーム作成

フォームの作成方法について。
とりあえず基本的な作成方法について記載する。
※気が向いたらFormTypeを作成する方法を別途まとめる。

フォームの作成

フォームを作成するメソッドをprivateで指定する。

private function createCommentForm()
{
    return $this->createFormBuilder()
            ->add('comment', 'textarea')
            ->add('submit', 'submit',[
                'label' => '送信'
            ])
            ->getForm();
}

先ほど指定したメソッドをrenderでビュー表示する際に呼び出す。
なお、下記は合わせてDBに登録されているコメントを取得する記述も加えている。

/**
* @Route("/")
* @Method("get")
*/
public function indexAction()
{
    // 投稿一覧を取得
    $em = $this->getDoctrine()->getManager();
    $testRepository = $em->getRepository('AppBundle:Test');
    $commentList = $testRepository->findAll();

    return $this->render('Testpage/index.html.twig',
        [
            // フォーム項目を生成
            'form' => $this->createCommentForm()->createView(),
            'commentList' => $commentList
        ]
    );

}

入力フォームのDBへの登録

postした時にDBに登録する処理。

/**
* @Route("/")
* @Method("post")
*/
public function indexPostAction(Request $request)
{   
    $form = $this->createCommentForm();// フォーム定義を取得
    $form->handleRequest($request); // 送信情報をフォームオブジェクトに取り込む
    if ($form->isValid()) {
        $data = $form->getData();// 入力項目の取得

        $test = new Test();
        $test->setComment($data['comment']);
        // date()はstringを返すため、DateTimeオブジェクトを生成する
        $test->setCreatedAt(new \DateTime());
        $test->setUpdatedAt(new \DateTime());

        $em = $this->getDoctrine()->getManager();
        $em->persist($test);
        $em->flush();

        return $this->redirect($this->generateUrl('app_testpage_index'));
    }   

    // 送信失敗
    return $this->redirect($this->generateUrl('app_testpage_index'));
}

フォーム項目のclassの指定

先ほどのcreateCommentFormメソッド内で、引数に配列を追加して定義する。

$this->createFormBuilder()->add('comment', 'textarea', ['attr' => ['class' => 'form-control']])

参考

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

7 − 1 =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください