blogチュートリアル(10) 記事の編集 ================================= .. note:: この記事は、Symfony 2.0.7 で動作確認しています。 最後に既存の記事を編集できるようにしてみましょう。 ここまで学習された方は、どのような手順で編集機能を実装するか、想像がついていることでしょう。 記事を編集するページのルーティングの作成 ---------------------------------------- Symfonyでページを追加する際の作業パターンは #. ルーティングを追加 #. アクションを追加 #. テンプレートを追加 です。記事を編集するページが増えますので、対応するルーティングを追加する必要があります。 ``src/My/BlogBundle/Resources/config/routing.yml`` に ``blog_edit`` ルート(route)を追加してください。 .. code-block:: yaml # src/My/BlogBundle/Resources/config/routing.yml blog_edit: pattern: /{id}/edit defaults: { _controller: MyBlogBundle:Default:edit } 編集アクションの作成 -------------------- 続いて、\ ``Default`` コントローラに ``edit`` アクションを追加します。 .. code-block:: php // 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(), )); } } 前までのステップで作成した ``newAction`` と ``deleteAction`` の内容を合わせたようなアクションになっています。 最初に ``$id`` の記事をデータベースから取得し、そのオブジェクトを元にフォームをビルドし、 バリデーションを行い、バリデーションに成功した場合はデータベースに反映しています。 .. note:: すでに永続化されているエンティティを ``EntityManager`` 経由で取得した場合、オブジェクトのプロパティを変更して ``EntityManager`` の ``flush()`` を実行するだけでデータベースに反映されることに注意してください。\ ``persist()`` は不要です。 編集用のテンプレートの作成 -------------------------- 編集用のフォームを表示するためのテンプレートファイルを作成します。 記事の追加のためのフォームと大きく異なる点は、action 属性のURIだけでしょう。 .. code-block:: jinja {# src/My/BlogBundle/Resources/views/Default/edit.html.twig #}
Id | Title | CreatedAt | Operation |
{{ post.id }} | {{ post.title }} | {{ post.createdAt|date('Y/m/d H:i') }} | Edit Delete |
No posts found |