Symfony2「blogチュートリアル(7) 記事の追加」
2011年12月13日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) 記事の追加