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 firebase database. j’ai

  • créé la classe d’entités invité avec toutes les variables pour eux (identifiant, nom, adresse, numéro de téléphone, etc.)
  • créé le schéma dans la firebase database mysql
  • créé un itinéraire pour “append un invité” à un modèle de brindille
  • créé un formType

et enfin une méthode “createGuest” dans le contrôleur et tout fonctionne bien.

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

Supprimer un object

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

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

Il ne dit rien de plus que cela (même la section “Mettre à jour un object” manque de documentation) sur la façon de connecter le contrôleur deleteAction ($ id) au modèle de brindille. Ce que je veux faire est de répertorier tous les invités avec une action viewGuests et un modèle de brindille viewGuests, ayant une icône de suppression à côté de chaque ligne, sur laquelle vous devez cliquer pour supprimer une entrée. Simple, mais je ne trouve aucune documentation et je ne sais pas par où commencer.

 public function deleteGuestAction($id) { $em = $this->getDocsortingne()->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 est intelligent et sait comment faire le find() par lui-même:

 public function deleteGuestAction(Guest $guest) { if (!$guest) { throw $this->createNotFoundException('No guest found'); } $em = $this->getDocsortingne()->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}) }}

DELETE FROM … WHERE id = …;

 protected function templateRemove($id){ $em = $this->getDocsortingne()->getManager(); $entity = $em->getRepository('XXXBundle:Templates')->findOneBy(array('id' => $id)); if ($entity != null){ $em->remove($entity); $em->flush(); } } 

De ce que je comprends, vous avez du mal avec quoi mettre dans votre modèle.

Je vais montrer un exemple:

 
    {% for guest in guests %}
  • {{ guest.name }} [[DELETE]]
  • {% endfor %}

Maintenant, ce qui se passe, c’est qu’il parcourt chaque object dans les invités (vous devrez le renommer si votre collection d’objects porte un nom différent!), Afficher le nom et placer le lien correct. Le nom de l’itinéraire peut être différent.