Symfony2「blogチュートリアル(9) 記事の削除」
2011年12月13日Symfony2「blogチュートリアル(9) 記事の削除」
ユーザが既存の記事を削除できるように機能追加
【削除用URIのルーティング作成】
削除するURIが増えるので、ルーティングを作成する
$ vim src/My/BlogBundle/Resources/config/routing.yml
。。。以下を追記
blog_delete:
pattern: /{id}/delete
defaults: { _controller: MyBlogBundle:Default:delete }
【削除アクションの追加】
削除用アクションを作成する
$ vim src/My/BlogBundle/Controller/DefaultController.php
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’));
}
}
【記事一覧テンプレートの変更】
削除リンクを作成する為、テンプレートの修正
$ 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_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>
【ブラウザ確認】
以下のURLへアクセスして、「Delete」リンクをクリック後、記事が削除されていることを確認
http://somewhere/repos/blog.git/web/app_dev.php/blog
【参考】
ref. blogチュートリアル(9) 記事の削除