2015-03-13 4 views
1

У меня есть кнопка в моей ветке, которую я хочу, чтобы удалить запись из таблицы. Когда я нажимаю кнопку удаления, страница перезагружается, но запись не удаляется.Symfony2 Удалить запись из таблицы

вот мой прутик

<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'); 
} 

ответ

2
$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 тот же.

+0

Куда я должен добавить это? Я уже сохраняю это, прежде чем я вызову метод flush. После флеша? – g1bbles

+0

вам не нужно сохранять объект, просто удалите его и промойте. – djoosi

+0

hmmm Я удалил строку persist, но он все еще не работает. какие-либо предложения? – g1bbles

Смежные вопросы