Подтвердить что ты не робот

Как удалить объект из symfony2

Мой первый проект symfony2 - это список гостей (приглашенных в мероприятии), хранящихся в базе данных. У меня

  • создал сущность класса Guest со всеми переменными для них (идентификатор, имя, адрес, номер телефона и т.д.).
  • создал схему в mysql db
  • создал маршрут для добавления "гостя" к шаблону ветки.
  • создал formType

и, наконец, метод 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'));
    }
4b9b3361

Ответ 1

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

Ответ 2

УДАЛИТЬ ОТ... 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();
            }
        }

Ответ 3

Из того, что я понимаю, вы боретесь с тем, что добавить в свой шаблон.

Я приведу пример:

<ul>
    {% for guest in guests %}
    <li>{{ guest.name }} <a href="{{ path('your_delete_route_name',{'id': guest.id}) }}">[[DELETE]]</a></li>
    {% endfor %}
</ul>

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