IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

souci deleteAction avec le CRUD généré


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 127
    Points : 49
    Points
    49
    Par défaut souci deleteAction avec le CRUD généré
    Bonjour à toutes et tous,

    Je rencontre un petit souci avec le CRUD généré par Symfony, et plus particulièrement en ce qui concerne le delete.

    Voici la partie concernée par le delete de mon controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
    public function deleteAction(Request $request, $id)
        {
            $form = $this->createDeleteForm($id);
            $form->handleRequest($request);
     
            if ($form->isValid()) {
                $em = $this->getDoctrine()->getManager();
                $entity = $em->getRepository('MeBlogBundle:Category')->find($id);
     
                if (!$entity) {
                    throw $this->createNotFoundException('Unable to find Category entity.');
                }
     
                $em->remove($entity);
                $em->flush();
            }
     
            return $this->redirect($this->generateUrl('admin_category'));
        }
     
        /**
         * Creates a form to delete a Category entity by id.
         *
         * @param mixed $id The entity id
         *
         * @return \Symfony\Component\Form\Form The form
         */
        private function createDeleteForm($id)
        {
            return $this->createFormBuilder()
                ->setAction($this->generateUrl('admin_category_delete', array('id' => $id)))
                ->setMethod('get')
                ->add('submit', 'submit', array('label' => 'Delete'))
                ->getForm()
            ;
        }
    Ensuite, ma route delete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    admin_category_delete:
        pattern:  /{id}/delete
        defaults: { _controller: "MelUserBundle:Admin/Category:delete" }
        requirements: { _method: post|delete }
    Et enfin ma suppression dans la vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <a href="{{ path('admin_category_delete', { 'id': entity.id }) }}" title="Supprimer">
       <img src="{{ asset('bundles/Meadmin/img/icons/cross.png') }}" alt="Supprimer" />
    </a>
    Je précise que ce bouton de suppression n'est pas dans un <form> puisque le design m'impose la chose autrement (c'est pour un admin): j'ai un tableau qui reprend les infos de mon entité, et une colonne avec l'action supprimer sur un lien comme vous pouvez le voir.

    Lorsque je tente une suppression, voici le message d'erreur:
    No route found for "GET /admin/category/6/delete": Method Not Allowed (Allow: POST, DELETE)
    Je comprends bien qu'il y a un soucis dans la méthode, j'ai par ailleurs essayé de modifier cela dans ma route, et de mettre "get" dans requirements: quand je fais cela, je n'ai plus de message d'erreur, tout semble bien se passer mais la suppression ne se fait pas dans ma base de données.

    Si quelqu'un pouvait m'éclairer, cela serait aimable.

    Bien à vous

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Salut,

    Le message d'erreur est explicite : tu essayes d'accéder à cette route via un lien en faisant une requête GET alors que les requirements de ta route t'imposent d'accéder à cette URL via une requête POST ou DELETE.

    Si ton problème n'est qu'une affaire de design et que tu souhaites utiliser le CRUD de Symfony je te suggère juste de remplacer ton bouton par un lien qui fera un submit de ton form.
    Quelque chose dans ce genre pourra faire l'affaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form id="my_form" method="post">
        <a href="javascript:{}" onclick="document.getElementById('my_form').submit();">Supprimer</a>
    </form>
    Si tu veux à tout prix utiliser une méthode GET, alors dans ce cas il te faudra faire l'action deleteAction toi même.

    ++

Discussions similaires

  1. Peut-on personnaliser ses requêtes avec un CRUD généré ?
    Par beaudelaire dans le forum ASP.NET MVC
    Réponses: 8
    Dernier message: 18/05/2012, 11h06
  2. Souci JDBC avec Mysql, programmation JAVA
    Par Danzel dans le forum Windows
    Réponses: 8
    Dernier message: 29/12/2006, 22h46
  3. [POO] Souci POO avec php 4
    Par naunau dans le forum Langage
    Réponses: 7
    Dernier message: 12/12/2006, 14h23
  4. soucis "order" avec union
    Par kyrsa dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/05/2006, 12h55
  5. problème avec un menu généré par MySQL
    Par GhostDady dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 30/03/2006, 11h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo