Symfony2「blogチュートリアル(7) 記事の追加」

Symfony2「blogチュートリアル(7) 記事の追加」

フォームを作成して、データの追加編集を行う

【ルーティング設定】

記事を追加するページのルーティング設定

$ vim src/My/BlogBundle/Resources/config/routing.yml
…以下を追加
blog_new:
pattern: /new
defaults: { _controller: MyBlogBundle:Default:new }

【Postモデル用のフォーム作成】

Defaultコントローラに以下のnewアクションを追加
use行も合わせて追加する

$ vim src/My/BlogBundle/Controller/DefaultController.php
use My\BlogBundle\Entity\Post;
// …

class DefaultController extends Controller
{
// …

public function newAction()
{
    // フォームのビルド
    $form = $this->createFormBuilder(new Post())
        ->add('title')
        ->add('body')
        ->getForm();

    // バリデーション
    $request = $this->getRequest();
    if ('POST' === $request->getMethod()) {
        $form->bindRequest($request);
        if ($form->isValid()) {
            // エンティティを永続化
            $post = $form->getData();
            $post->setCreatedAt(new \DateTime());
            $post->setUpdatedAt(new \DateTime());
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($post);
            $em->flush();
            return $this->redirect($this->generateUrl('blog_index'));
        }
    }

    // 描画
    return $this->render('MyBlogBundle:Default:new.html.twig', array(
        'form' => $form->createView(),
    ));
}

}

【フォーム用のテンプレート作成】

フォーム表示用のテンプレートを作成します

$ vim src/My/BlogBundle/Resources/views/Default/new.html.twig
<h1>Add Post</h1>
<form action="{{ path(‘blog_new’) }}" method="post" {{ form_enctype(form) }} novalidate>
{{ form_widget(form) }}
<input type="submit" value="Save Post" />
</form>

【追加ページへのリンクを作成】

$ vim src/My/BlogBundle/Resources/views/Default/index.html.twig
<div>
<a href="{{ path(‘blog_new’) }}">add post</a>
</div>

【ブラウザで確認】

以下のURLへアクセスして、表示の確認とエントリの投稿テストを行う

http://somewhere/repos/blog.git/web/app_dev.php/blog/new

【参考】

ref. blogチュートリアル(7) 記事の追加