Как удалить объект с использованием Symfony2
мой первый проект symfony2-это список гостей (приглашенных на мероприятие), хранящийся в базе данных. У меня есть
- создал гостевой класс сущности со всеми переменными для них (id, имя, адрес, номер телефона и т. д.)
- создал схему в БД mysql
- создал маршрут для "добавления гостя" в шаблон ветки
- создал formType
и, наконец, метод "createGuest" в контроллере, и все работает штраф.
Я не могу удалить гостя из базы данных. Я прочитал каждый учебник в интернете, включая официальную книгу Symfony2; все, что он говорит:
удаление объекта
удаление объекта очень похоже, но требует вызова метода remove () диспетчера сущностей:
$em->remove($product);
$em->flush();
Он не говорит ничего больше, чем это (даже раздел "обновить объект" отсутствует документация) на как подключить контроллер deleteAction ($id) с шаблоном twig. То, что я хочу сделать, это перечислить всех гостей с действием viewGuests и шаблоном viewguests twig, имеющим значок удаления рядом с каждой строкой, который вы должны нажать, чтобы удалить запись. Просто, но я не могу найти никакой документации и не знаю, с чего начать.
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'));
}
3 ответа:
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}) }}
УДАЛИТЬ ИЗ ... Где 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>
теперь происходит итерация по каждому объекту в гостях (вам придется переименовать это, если ваша коллекция объектов называется иначе!), показывает имя и помещает правильную ссылку. Название маршрута может быть различным.