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