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 :

récupération de l'id de l'entité en cours d'affichage


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut récupération de l'id de l'entité en cours d'affichage
    bonsoir,

    j'ai une relation 1..* (ManyToMany) entres les chapitres et les questions. C'est a dire que un chapitre possède plusieurs questions et une question a un seul chapitre. Chaque question possède une réponse par projet (projet ->1..* ->reponseQuestion<-- 1..*<--questions). donc ce cas il faut que récupéré l'id du chapitre, de la question et de projet.

    la classe Chapitres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Chapitres
     
    {
     
      /**
         * @ORM\OneToMany(targetEntity="Management\QuestionsBundle\Entity\Questions", mappedBy="chps" , cascade={"persist"})
         * 
         */
        private $chpQuestions;
     
     //ici les getters et les setters
    -la classe questions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Questions{
     
     
     /**
         * @ORM\ManyToOne(targetEntity="Management\ChapitresBundle\Entity\Chapitres", inversedBy="chpQuestions")
         * @ORM\JoinColumn(nullable=false)
         * @Assert\NotBlank(message=" La spécification du chapitre est obligatoire")
         */
        private $chps;
     
    }
    la classe ResponseQuestions:
    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
     
     
    class ResponseQuestions{
     
      /**
         * @ORM\ManyToOne(targetEntity="Management\ProjetsBundle\Entity\Projets", inversedBy="projetResponse")
         * @ORM\JoinColumn(nullable=false , name="projets_id" , referencedColumnName="id_projets")
         * @Assert\NotBlank(message=" ce champs est obligatoire")
         *
         */
        private $projet;
     
        /**
         * @ORM\ManyToOne(targetEntity="Management\QuestionsBundle\Entity\Questions", inversedBy="Response")
         * @ORM\JoinColumn(nullable=false, referencedColumnName="id_questions" , name="questions_id")
         * @Assert\NotBlank(message=" ce champs est obligatoire")
         *
         */
        private $questions;
    }
    formType:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $builder
                ->add('reponse','text'); // concernant la classe reponseQuestions
    => dans ma vue "show" (url /2/show) j'ai les informations du chapitre et de ces questions sont bien affiché.Dans la même page j'ai crée un form de réponse qui permet de répondre a tous les questions de ce chapitre. Le probléme que j'en sais pas comment récupérer l'id de chapitre qui en cours d'affichage! Si j'arrive a récupérer l'id de chapitre donc je peux récupéré l'id de la question grâce a l’instanciation du classe question que j'ai défini dans la classe Chapitres" $chpQuestions".

    Possible de récupérer l'id partir de cette instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $chapitres= $em->getRepository('ChapitresBundle:Chapitres')->find($id);
    Merci

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    le controller connait l'id, c'est le controller qui passe à la vue l'id.... c'est du MVC

  3. #3
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par dukoid Voir le message
    le controller connait l'id, c'est le controller qui passe à la vue l'id.... c'est du MVC
    L'id sera récupéré d’après mon action "show" au sien du contrôleur. Donc, j'ai utilisé la notion de session. Alors j'ai arrivé a récupérer les ids mais lorsque j'utilise ces dernier dans mon action "create" pour créer une réponse pour les questions du chapitre qui est en cours, j'ai un probléme qu'il arrive pas a sauvegarder dans la BD et il n'affiche aucun erreur (j'en sais pas pourquoi!)

    Voilà mon code:
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    
    //l'action "show" contient l'affichage du chapitre (url: /1/show) , la récupération de l'id et l'affichage de form
    
    public function showAction($id)
        {
            $message= " Aucune information existe";
            $ques= new ReponsesQues(); // l'entité qui contient tous les réponses aux questions
    
            $em = $this->getDoctrine()->getManager();
    
            // affichage de tous les informations du chapitre ayant comme id =1
            $info = $em->getRepository('ChapitresBundle:Chapitres')->find($id);
    
              //création du form pour faire l'ajout de la réponse
           $form=$this->createForm(new ReponsesQuesType(), $ques);
    
            $entity = $em->getRepository('ChapitresBundle:Chapitres')->findBy(array('id'=> $id));
    
            foreach($entity as $IdChps) {
    
            // pour récupérer l'id du chapitre
                $idChapitres=$IdChps->getId();
              /*  var_dump( $idChapitres); --> il affiche array[0] : int(1) */
    
                 //ici la création de la variable session et stocké de dans l'id du chapitre (dans notre cas l'id=1)
                $this->get('session')->set('infoChapitres', $idChapitres);
            }
    
            if (!$entity ) {
    
                return  $this->render('ChapitresBundle:Default:404.html.twig', array('info' => $message));
            }
    
            return $this->render('MissionsBundle:ReponsesQues:show.html.twig', array(
                'entity' => $info,
                'form'  => $form->createView(),
                'error' =>'',
            ));
    
        }
    
    
    //l'action "create" permet de récupérer l'objet ReponsesQues crée et stocké dans BD en modifiant quelque variable.
    
     public function createAction(Request $request)
        {
           // création du tableau pour stocker les ids des questions par chapitres
            $infQues= array();
    
           // récupérer la date 'now'
            $dateresp=new \DateTime();
    
            $entity = new ReponsesQues();
    
            $form= $this->createForm(new ReponsesQuesType(),  $entity );
            $form->handleRequest($request);
    
        /* var_dump($this->get('session')->get('infoChapitres')); --> il affiche array[0]: int(1) 
          var_dump($this->get('session')->get('infoProjet')); --> il affiche array[0]; int(4) 
         => note: ces ids existent dans ma BD
       */
    
            $em = $this->getDoctrine()->getManager();
    
           // afficher tous les informations du chapitre selon l'id qui se trouve dans la variable session "infoChapitres", dans ce cas id=1 (les informations sont bien affiché)
            $chapitres= $em->getRepository('ChapitresBundle:Chapitres')->find($this->get('session')->get('infoChapitres'));
           
            // récupération des questions en utilisant la variable de la relation entre l'entité 'Questions' & 'Chapitres' 
            $x=$chapitres->getChpQuestions();
    
          /* ce traitement permet de  stocker les ids des questions par chapitre dans un tableau */
            $i=0;
            foreach ($x as $Tousquestions)
            {
                $infQues[$i++]=$Tousquestions->getId();
            }
           
        // var_dump $infQues); --> il affiche array[0]: int(1)  car ce chapitre(id=1) contient une seule question (id=1)
        
              if ($form->isValid())
              {
    
              // le probléme se trouve ici il n'arrive a lire ce boucle, j'ai faire un petit test dedans avec une chaîne des caractères en utilisant la fonction "var_dump('hello')". 
           //Mais ce traitement ne sera pas affiché !
    
                $pourcentageN=$entity->getNivConformite();
                $entity->setNivEnPourcentage($pourcentageN);
                $entity->setDateReponse($dateresp);
                
                // ajouter l'id du projet
                $entity->setProjet($this->get('session')->get('infoProjet'));
    
               // l'ajout de tous les ids des questions (car un chapitre peut contenir plus que une question (ICI la relation 1..*))
                foreach ($x as $qu)
                {
               // $entity->setQuestions($infQues);
                    $qu->setQuestions($infQues);
                }
    
                $em = $this->getDoctrine()->getManager();
                $em->persist($entity);
                $em->flush();
    
                return $this->render('MissionsBundle:ReponsesQues:show.html.twig', array(
                    'entity' => $chapitres,
                    'form'   => $form->createView(),
                    'error' =>'',
                ));
              }
    
            return $this->render('MissionsBundle:ReponsesQues:show.html.twig', array(
                'entity' => $chapitres,
                'form'   => $form->createView(),
                'error' =>'1',
            ));
    
        }
    Merci

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    pourquoi utiliser une session ?

    tu envois le ou les id ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     return  $this->render('ChapitresBundle:Default:404.html.twig', array('info' => $message,   'id' => xxxxxxxxxxx  ICI xxxxxxxxxxxxxxxxx));
    non ?

    dans la vue :

  5. #5
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par dukoid Voir le message
    pourquoi utiliser une session ?

    tu envois le ou les id ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     return  $this->render('ChapitresBundle:Default:404.html.twig', array('info' => $message,   'id' => xxxxxxxxxxx  ICI xxxxxxxxxxxxxxxxx));
    non ?

    dans la vue :
    - j'utilise la session pour stocker l'id du projet qui en cours (enable) et aussi l'id du chapitre (car les questions sont regroupé par chapitre).
    -j'envoyé les ids dans la méthode "createAction" pour récupérer puis stocké dans ma table "ResponseQues" car cette table contient id_projet et id_question (la réponse aux questions doit être unique par chapitre)

    la page:404.html.twig contient seulement le message d'erreur que j'ai défini dans la variable "info"

    Mais j'ai changé le traitement pour la récupération de l'id du chapitre:

    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
     public function showAction($id)
        {
    $idChapitres =array();
     
            $i=0;
            foreach($entity as $IdChps) {
                $idChapitres[$i++]=$IdChps->getId();
       var_dump($IdChps->getId()); exit(); // il affiche int(1) c'est l'id de mon chapitre qui en cours d'affiche
            }
     
            $this->get('session')->set('infoChapitres', $idChapitres);
     
            var_dump($idChapitres); exit();  // il affiche array(0) { } -> vide !
     
    }
    comment corriger la récupération de l'id du chapitre ?, Merci

  6. #6
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    ça donne quoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var_dump($entity); exit;

  7. #7
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par dukoid Voir le message
    ça donne quoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var_dump($entity); exit;
    il retourne les information de chapitre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    array(1) { [0]=> object(Management\ChapitresBundle\Entity\Chapitres)#358 (8) { ["id":"Management\ChapitresBundle\Entity\Chapitres":private]=> int(1) ["nom_chapitre":"Management\ChapitresBundle\Entity\Chapitres":private]=> string(41) "politique de sécurité de l'information." ["prefixe":"Management\ChapitresBundle\Entity\Chapitres":private]=> string(3) "A.5" ["description":"Management\ChapitresBundle\Entity\Chapitres":private]=> string(279) "
    8.2.x core/themes/stable/templates/admin/ckeditor-settings-toolbar.html.twig
    8.2.x core/modules/ckeditor/templates/ckeditor-settings-toolbar.html.twig
    8.0.x core/modules/ckeditor/templates/ckeditor-settings-toolbar.html.twig
    j'ai testé aussi less informations du chapitre dans la méthode createAction, il affiche donc les mêmes données (pas de probléme au niveau de l'id du chapitre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            $chapitres= $em->getRepository('ChapitresBundle:Chapitres')->find($this->get('session')->get('infoChapitres'));
    var_dump($chapitres); exit();
    Bizarre un peu ce probléme !

  8. #8
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    et ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
          $idChapitres =array();
     
            $i=0;
            foreach($entity as $IdChps) {
                $idChapitres[$i++]=$IdChps->getId();
            }
     
     
            var_dump($idChapitres);
     
            $this->get('session')->set('infoChapitres', $idChapitres);
     
            var_dump($idChapitres); exit();


    les sessions en sf passe par $request: http://symfony.com/doc/2.7/controller.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $session = $request->getSession();

  9. #9
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par dukoid Voir le message
    et ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
          $idChapitres =array();
     
            $i=0;
            foreach($entity as $IdChps) {
                $idChapitres[$i++]=$IdChps->getId();
            }
     
     
            var_dump($idChapitres);
     
            $this->get('session')->set('infoChapitres', $idChapitres);
     
            var_dump($idChapitres); exit();


    les sessions en sf passe par $request: http://symfony.com/doc/2.7/controller.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $session = $request->getSession();

    il affiche null dans ce cas j'ai changé le traitement et il çà marche sans probléme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            foreach($entity as $IdChps) {
     
                $idChapitres=$IdChps->getId();
            }
     
            var_dump($idChapitres); exit(); // il affiche int(1)
     
           $this->get('session')->set('infoChapitres', $idChapitres);
    donc le probléme de l'id de chapitre est résolu

  10. #10
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    voilà la form d'ajout qui se trouve dans la vue "show" . pour chaque question j'affiche ce formulaire

    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
     
     
     
     {% for ques in  entity.ChpQuestions %} // entity.entity.ChpQuestions contient l'ensemble des question de ce chapitre
     
            <li>
                <div class="wizard-heading">
                    {{ ques.Clause }}.  {{ ques.Question }}
                    <span class="icon-summary"></span>
                </div>
                <div class="wizard-content">
                    <div class="panel-body">
     
                        <p>
     
                  <form action="{{ path('mission_create') }}" method="post" {{ form_enctype(form) }} >
     
                      {{ form_row(form.NivConformite, { 'label': 'Niveau De Comformité *:'}) }}
     
                        {{ form_row(form.preuves, { 'label': 'La preuve *:'}) }}
     
                              {{ form_rest(form) }}
     
                            <button class="btn-green done" type="submit"><strong>Sauvegarder</strong></button>
                        </form>
    </p>
     
    </div>
     
    </div>
    </li>
     
    {% endfor %}
    Je pense que probléme proviens d'ici (createAction). dans la boucle "if" j'arrive pas affiché une chaîne des caractères

    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
      if ($form->isValid())
              {
                $pourcentageN=$entity->getNivConformite();
                $entity->setNivEnPourcentage($pourcentageN);
                $entity->setDateReponse($dateresp);
                $entity->setProjet($this->get('session')->get('infoProjet'));
                foreach ($x as $qu)
                {
               // $entity->setQuestions($infQues);
                    $qu->setQuestions($infQues);
                }
     
                $em = $this->getDoctrine()->getManager();
                $em->persist($entity);
                $em->flush();
     
                return $this->render('MissionsBundle:ReponsesQues:show.html.twig', array(
                    'entity' => $chapitres,
                    'form'   => $form->createView(),
                    'error' =>'',
                ));
              }

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/03/2014, 14h17
  2. Réponses: 2
    Dernier message: 20/03/2008, 10h19
  3. Réponses: 3
    Dernier message: 16/01/2007, 01h28
  4. Entité contenant d'autres entités
    Par SesechXP dans le forum SQLite
    Réponses: 3
    Dernier message: 05/05/2006, 14h15
  5. [VB.NET] Récupération des settings dans un autre module
    Par boulete dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/04/2006, 16h05

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