blogチュートリアル(9) 記事の削除 ================================ .. note:: この記事は、Symfony 2.0.7 で動作確認しています。 次は、ユーザーが既存の記事を削除できるようにしてみましょう。 記事を削除するURIのルーティングの作成 ------------------------------------- 記事を削除するURI (※ここではページではない) が増えますので、対応するルーティングを追加する必要があります。 ``src/My/BlogBundle/Resources/config/routing.yml`` に ``blog_delete`` ルート(route)を追加してください。 .. code-block:: yaml # src/My/BlogBundle/Resources/config/routing.yml blog_delete: pattern: /{id}/delete defaults: { _controller: MyBlogBundle:Default:delete } 削除アクションの作成 -------------------- 続いて、\ ``Default`` コントローラに ``delete`` アクションを追加します。 .. code-block:: php // src/My/BlogBundle/Controller/DefaultController.php use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class DefaultController extends Controller { // ... public function deleteAction($id) { $em = $this->getDoctrine()->getEntityManager(); $post = $em->find('MyBlogBundle:Post', $id); if (!$post) { throw new NotFoundHttpException('The post does not exist.'); } $em->remove($post); $em->flush(); return $this->redirect($this->generateUrl('blog_index')); } } このコードでは、与えられた ``{id}`` を元に、該当記事のレコードに対応するエンティティを取得しています。 エンティティが見つからなかった場合は、\ ``NotFoundHttpException`` 例外をスローして処理を中断します。 エンティティが見つかった場合は、\ ``EntityManager`` の ``remove()`` メソッドで削除指示を出して、\ ``flush()`` します。 削除後は記事一覧にリダイレクトします。 また、記事の削除をするためのリンクを、記事一覧に追加します。 .. code-block:: jinja {# src/My/BlogBundle/Resources/views/Default/index.html.twig #}

Blog posts

{# ここから、posts配列をループして、投稿記事の情報を表示 #} {% for post in posts %} {% else %} {% endfor %}
Id Title CreatedAt Operation
{{ post.id }} {{ post.title }} {{ post.createdAt|date('Y/m/d H:i') }} Delete
No posts found
add post
ブラウザで確認 -------------- コードの入力が完了したら、ブラウザで http://localhost/Symfony/web/app_dev.php/blog/ にアクセスしてみてください。 各行にDeleteというリンクが出ているので、押すと記事が消えるでしょう。