Symfony2「blogチュートリアル(10) 記事の編集」
2011年12月13日Symfony2「blogチュートリアル(10) 記事の編集」
記事の削除居続いて、CRUDの最後となる編集の機能追加
【編集ページへのルーティング追加】
記事を編集するページが増えるので、対応するルーティングを追加する
$ vim src/My/BlogBundle/Resources/config/routing.yml
blog_edit:
pattern: /{id}/edit
defaults: { _controller: MyBlogBundle:Default:edit }
【編集アクションの作成】
Defaultコントローラにeditアクションを追加する
$ vim src/My/BlogBundle/Controller/DefaultController.php
class DefaultController extends Controller
{
// …
public function editAction($id)
{
// DBから取得
$em = $this->getDoctrine()->getEntityManager();
$post = $em->find(‘MyBlogBundle:Post’, $id);
if (!$post) {
throw new NotFoundHttpException(‘The post does not exist.’);
}// フォームのビルド $form = $this->createFormBuilder($post) ->add('title') ->add('body') ->getForm(); // バリデーション $request = $this->getRequest(); if ('POST' === $request->getMethod()) { $form->bindRequest($request); if ($form->isValid()) { // 更新されたエンティティをデータベースに保存 $post = $form->getData(); $post->setUpdatedAt(new \DateTime()); $em->flush(); return $this->redirect($this->generateUrl('blog_index')); } } // 描画 return $this->render('MyBlogBundle:Default:edit.html.twig', array( 'post' => $post, 'form' => $form->createView(), )); }
}
【編集用テンプレートの作成】
編集用のテンプレートを作成
編集用テンプレート
$ vim src/My/BlogBundle/Resources/views/Default/edit.html.twig
<h1>Edit Post</h1>
<form action="{{ path(‘blog_edit’, {‘id’:post.id}) }}" 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
<h1>Blog posts</h1>
<table>
<tr>
<td>Id</td>
<td>Title</td>
<td>CreatedAt</td>
<td>Operation</td>
</tr>
{# ここから、posts配列をループして、投稿記事の情報を表示 #}
{% for post in posts %}
<tr>
<td>{{ post.id }}</td>
<td><a href="{{ path(‘blog_show’, {‘id’:post.id}) }}">{{ post.title }}</a></td>
<td>{{ post.createdAt|date(‘Y/m/d H:i’) }}</td>
<td><a href="{{ path(‘blog_edit’, {‘id’:post.id}) }}">Edit</a> <a href="{{ path(‘blog_delete’, {‘id’:post.id}) }}">Delete</a></td>
</tr>
{% else %}
<tr>
<td colspan="4">No posts found</td>
</tr>
{% endfor %}
</table>
<div>
<a href="{{ path(‘blog_new’) }}">add post</a>
</div>
【ブラウザで確認】
以下へアクセス後、「edit」リンクがあることを確認
投稿記事(POST)の変更が可能なことを確認
http://somewhere/respo/blog.git/blog