web-dev-qa-db-fra.com

Comment supprimer une entité de symfony2

Mon premier projet symfony2 est une liste d'invités (invités à un événement) stockés dans une base de données. j'ai

  • créé la classe d'entité Guest avec toutes les variables qui les concernent (identifiant, nom, adresse, numéro de téléphone, etc.)
  • créé le schéma dans la base de données mysql
  • créé un itinéraire pour "ajouter un invité" à un modèle twig
  • créé un formType

et enfin une méthode "createGuest" dans le contrôleur et tout fonctionne correctement.

Je n'arrive pas à supprimer un invité de la base de données. J'ai lu tous les tutoriels sur le Web, y compris le livre officiel de Symfony2; tout ce qu'il dit est:

Suppression d'un objet

La suppression d'un objet est très similaire, mais nécessite un appel à la méthode remove () du gestionnaire d'entités:

$em->remove($product);
$em->flush();

Cela ne dit rien de plus que cela (même la section "Mise à jour d'un objet" manque de documentation) sur la façon de connecter le contrôleur deleteAction ($ id) avec le modèle twig. Ce que je veux est de répertorier tous les invités avec une action viewGuests et un modèle viewGuests twig), une icône de suppression étant placée à côté de chaque ligne, sur laquelle vous devez cliquer pour supprimer une entrée. Simple, mais je ne trouve aucun documentation et ne sais pas par où commencer.

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

Symfony est intelligent et sait faire le find() par lui-même:

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

Pour envoyer l'identifiant dans votre contrôleur, utilisez {{ path('your_route', {'id': guest.id}) }}

85
Jérôme Boé

DELETE OF ... 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();
            }
        }
5
websky

D'après ce que j'ai compris, vous avez du mal à définir ce que vous souhaitez mettre dans votre modèle.

Je vais montrer un exemple:

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

Maintenant, que se passe-t-il si elle parcourt chaque objet dans les invités (vous devrez le renommer si votre collection d'objets porte un nom différent!), Affiche le nom et place le lien correct. Le nom de la route peut être différent.

3
Sgoettschkes