Мой первый проект symfony2 - это список гостей (приглашенных в мероприятии), хранящихся в базе данных. У меня
и, наконец, метод createGuest в контроллере, и все работает нормально.
Мне не удастся удалить гостя из базы данных. Я прочитал каждый учебник в Интернете, включая официальную книгу Symfony2; все, что он говорит:
Удаление объекта
Удаление объекта очень похоже, но требует вызова метода remove() диспетчера сущностей:
$em->remove($product);
$em->flush();
В нем ничего не сказано (даже в разделе "Обновить объект" отсутствует документация) о том, как подключить контроллер deleteAction ($ id) с шаблоном ветки. То, что я хочу сделать, - это перечислить всех гостей с помощью действия viewGuests и шаблона twig viewGuests, имеющего значок удаления рядом с каждой строкой, который вы должны щелкнуть, чтобы удалить запись. Простой, но я не могу найти документацию и не знаю, с чего начать.
public function deleteGuestAction($id)
{
$em = $this->getDoctrine()->getEntityManager();
$guest = $em->getRepository('GuestBundle:Guest')->find($id);
if (!$guest) {
throw $this->createNotFoundException('No guest found for id '.$id);
}
$em->remove($guest);
$em->flush();
return $this->redirect($this->generateUrl('GuestBundle:Page:viewGuests.html.twig'));
}
Symfony умный и знает, как сделать find()
самостоятельно:
public function deleteGuestAction(Guest $guest)
{
if (!$guest) {
throw $this->createNotFoundException('No guest found');
}
$em = $this->getDoctrine()->getEntityManager();
$em->remove($guest);
$em->flush();
return $this->redirect($this->generateUrl('GuestBundle:Page:viewGuests.html.twig'));
}
Чтобы отправить идентификатор в свой контроллер, используйте {{ path('your_route', {'id': guest.id}) }}
УДАЛИТЬ ОТ... WHERE id =...;
protected function templateRemove($id){
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('XXXBundle:Templates')->findOneBy(array('id' => $id));
if ($entity != null){
$em->remove($entity);
$em->flush();
}
}
Из того, что я понимаю, вы боретесь с тем, что добавить в свой шаблон.
Я приведу пример:
<ul>
{% for guest in guests %}
<li>{{ guest.name }} <a href="{{ path('your_delete_route_name',{'id': guest.id}) }}">[[DELETE]]</a></li>
{% endfor %}
</ul>
Теперь, что происходит, он выполняет итерацию по каждому объекту внутри гостей (вам придется переименовать его, если ваша коллекция объектов называется иначе!), показывает имя и помещает правильную ссылку. Название маршрута может отличаться.
return $this->redirect($this->generateUrl('route_name_where_i_want_to_go'));
перенаправить пользователя на страницу.