Как удалить объект с использованием 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 52

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>

теперь происходит итерация по каждому объекту в гостях (вам придется переименовать это, если ваша коллекция объектов называется иначе!), показывает имя и помещает правильную ссылку. Название маршрута может быть различным.