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 :

Problème à l'update [2.x]


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 Problème à l'update
    Bonjour à tous,


    Je rencontre un souci au niveau de l'update d'une entité.
    Je m'explique: une fois sur le formulaire d'édition (qui s'affiche bien), si je valide mon entité sans la modifier, tout se passe nickel.
    Par contre, si je modifie le titre par exemple, et que je valide la modification, je tombe sur une belle erreur: Enable to find tutorial entity.

    Le stack m'indique un souci à la ligne 10:

    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
     
     public function editAction($slug)
        {
            $em = $this->getDoctrine()->getManager();
     
            $entity = $em->getRepository('SiteFrontBundle:Tutorial')->find($slug);
     
            if (!$entity)
            {
                throw $this->createNotFoundException('Unable to find Tutorial entity.');
            }
     
            $editForm = $this->createEditForm($entity);
            $deleteForm = $this->createDeleteForm($slug);
     
            return $this->render('SiteFrontBundle:Admin/Tutorial:edit.html.twig', 
                    array(
                        'entity'      => $entity,
                        'edit_form'   => $editForm->createView(),
                        'delete_form' => $deleteForm->createView(),
                    ));
        }
    Si je vais voir en base de données, mon entité est cependant bien modifiée.

    Pour info, voici les autres actions qui gèrent l'update:

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    /**
        * Creates a form to edit a Tutorial entity.
        *
        * @param Tutorial $entity The entity
        *
        * @return \Symfony\Component\Form\Form The form
        */
        private function createEditForm(Tutorial $entity)
        {
            $form = $this->createForm(new TutorialType(), $entity, 
                    array(
                        'action' => $this->generateUrl('admin_tutorial_update', 
                                array(
                                    'slug' => $entity->getSlug()
                                )),
                        'method' => 'PUT',
            ));
     
            $form->add('submit', 'submit', 
                    array(
                        'label' => 'Mettre à jour',
                        'attr'  => array('class' => 'btn btn-success')
            ));
     
            return $form;
        }
     
        /**
         * Edits an existing Tutorial entity.
         *
         */
        public function updateAction(Request $request, $slug)
        {
            $em = $this->getDoctrine()->getManager();
     
            $entity = $em->getRepository('SiteFrontBundle:Tutorial')->find($slug);
     
            if (!$entity) {
                throw $this->createNotFoundException('Unable to find Tutorial entity.');
            }
     
            $deleteForm = $this->createDeleteForm($slug);
            $editForm = $this->createEditForm($entity);
            $editForm->handleRequest($request);
     
            if ($editForm->isValid()) {
                $em->flush();
     
                return $this->redirect($this->generateUrl('admin_tutorial_edit', 
                        array(
                            'slug' => $slug
                )));
            }
     
            return $this->render('SiteFrontBundle:Admin/Tutorial:edit.html.twig', 
                    array(
                        'entity'      => $entity,
                        'edit_form'   => $editForm->createView(),
                        'delete_form' => $deleteForm->createView(),
            ));
        }
    Je ne comprends pas l'erreur, pour la simple raison que j'ai utilisé cette même logique pour d'autres entités, et que je n'ai pas le moindre soucis... En plus ces actions ont été générées par le CRUD, donc en principe ça doit être correct.

    Une aide serait la bienvenue les amis, ça fait 2 jours que j'ai envie de balancer mon PC par la fenêtre

  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
    À moins que 'slug' soit l'id de ton entité, la méthode find() ne me semble pas la plus pertinente à utiliser.
    Envisage peut-être plutôt un findOneBy(array('slug' => $slug)).

    ++

  3. #3
    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
    Bah en fait, le slug est un champ auto généré.
    Si le titre de mon tutoriel est "Installer le Twitter Bootstrap", le slug généré sera un truc du genre "installer-le-twitter-bootstrap".

    Je l'utilise pour avoir des URL propres en fait.
    Mon action show utilise aussi un sur le slug également, et je n'ai pas de souci.

    Peux-tu m'expliquer en quoi le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findOneBy(array('slug' => $slug))
    pourrait règler mon souci?

  4. #4
    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
    Le slug peut être un champs auto-généré et même unique sans pour autant être l'id de ton entité.

    La méthode find() est un raccourci qui revient à faire findOneBy(array('id' => $slug)).
    Donc en passant un slug c'est comme si tu recherchais dans ta base de données une entrée qui possède "installer-le-twitter-bootstrap" en id.

    Dans un premier temps tu pourrais dumper $entity le résultat histoire de savoir ce que ça te retourne mais il y a de grandes chances pour que le résultat de ton $entity = $em->getRepository('SiteFrontBundle:Tutorial')->find($slug); soit null, raison pour laquelle tu entres dans la condition qui te renvoie l'exception à la ligne 10.

  5. #5
    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
    Merci pour l'explication plus que claire!

    En effet, un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var_dump($entity);
    exit();

    ... me retournait null.

    Merci pour l'aide, tout est nickel ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] problème requête UPDATE
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/10/2005, 18h28
  2. problème de Update
    Par cyrill.gremaud dans le forum ASP
    Réponses: 7
    Dernier message: 29/08/2005, 20h58
  3. [C#] [Oracle] Problème d'Update
    Par _Air_ dans le forum Windows Forms
    Réponses: 12
    Dernier message: 06/04/2005, 13h56
  4. Problème requete update
    Par krfa1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2005, 08h47
  5. problème pour updater une BD
    Par yoda_style dans le forum ASP
    Réponses: 6
    Dernier message: 17/03/2005, 10h56

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