У меня есть кнопка на моей ветке, которую я хочу, чтобы удалить запись из таблицы. Когда я нажимаю кнопку удаления, страница перезагружается, но запись не удаляется.
вот моя ветка
<h1>Admin Area - The football blog</h1> <table class="zebra"> <thead> <tr> <th>Title</th> <th>Date</th> <th>Action</th> </tr> </thead> <tbody> <tr> {% for entity in adminentities %} <td>{{entity.postTitle}}</td> <td>{{ entity.postDescription }} </td> <td> <a href="{{ path('deletepost', { 'id': entity.id }) }}">Delete</a> || Edit</td> </tr> {% endfor %} </tbody> </table>
Вот мой контроллер.
/** * @Route("/posted/admin", name="deletepost") * @Template() */ public function admindeleteAction($id) { $em = $this->getDoctrine()->getEntityManager(); $adminentities = $em->getRepository('BlogBundle:posted') ->findOneBy(array('post'=>$post->getId(), 'id'=>$id)); $em->remove($adminentities); $em->persist($adminentities); $em->flush(); return $this->render('BlogBundle:Default:admin.html.twig'); }
$em->persist($adminentities); // This line will persist you entity again.
Поэтому вы можете просто удалить эту строку, и я думаю, что все в порядке. Кроме того, если вы сохраняете эту строку, идентификатор вашей сущности изменяется каждый раз, когда вы нажимаете кнопку удаления
Наконец, ваш код будет выглядеть так:
public function admindeleteAction($id) { $em = $this->getDoctrine()->getEntityManager(); $adminentities = $em->getRepository('BlogBundle:posted')->find($id); $em->remove($adminentities); $em->flush(); return $this->render('BlogBundle:Default:admin.html.twig'); }
Или вы можете напрямую передать свою сущность методу (проверьте синтаксис вашей ситуации):
public function admindeleteAction(Posted $posted) { $em = $this->getDoctrine()->getEntityManager(); $em->remove($posted); $em->flush(); return $this->render('BlogBundle:Default:admin.html.twig'); }
И параметр в TWIG тот же.