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 :

Recuperer une entity en se basant sur les donnees soumises d'un formulaire [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Par défaut Recuperer une entity en se basant sur les donnees soumises d'un formulaire
    Bonjour a tous
    j'ai un problem qui semble etre facile a resoudre mais bien difficile pour moi: je dispose d'une entity Category avec un attribut "name" et de son formulaire CategoryType une fois afficher le formulaire, remplie et soumi, je voudrais selectionner les entities de la classe Service (pour construire un autre formulaire plustard mais pas important pour l'instant....) qui est en relation ManyToOne avec Category voila. J'avais procede comme cela:

    l'action 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
     
    public function preRegistrationAction()
        {
            $category = new Category;
            $form = $this->createForm(new CategoryType, $category);
            $request = $this->getRequest();
            $em = $this->getDoctrine()->getManager();
     
            if($request->getMethod()=='POST'){
                $form->bind($request);
     
                $category = $form->getData();
                $categoryName = $category->getName();
     
                //throw $this->createNotFoundException($categoryName);
     
                $categoryId = $em->getRepository('MpkCmsBundle:Category')->findOneBy(array('name' => $categoryName));
                $services = $em->getRepository('MpkCmsBundle:Service')->findByCategory2($categoryId);
     
                return $this->render('MpkCmsBundle:Cms:index.html.twig', array('services' => $services,
                                                                               'categoryId' => $categoryId,));
                throw $this->createNotFoundException($category->getName());
     
                return $this->redirect($this->generateUrl('mpk_cms_company_registration',
                                                          array('category_id' => $categoryId)));
            }
     
            return $this->render('MpkCmsBundle:Default:index.html.twig',
                                array('form' => $form->createView()));
     
        }
    mon CategoryType.php
    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
     
    <?php
     
    namespace Mpk\CmsBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
     
    class CategoryType extends AbstractType
    {
        /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('name', 'entity', array('class' => 'Mpk\CmsBundle\Entity\Category',
                                              'placeholder' => '',
                                              'property' => 'name',))
     
                ->add('save', 'submit')
            ;
        }
     
        /**
         * @param OptionsResolverInterface $resolver
         */
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Mpk\CmsBundle\Entity\Category'
            ));
        }
     
        /**
         * @return string
         */
        public function getName()
        {
            return 'mpk_cmsbundle_category';
        }
    }
    le problem est que je recupere bien la donnee soumise du formulaire et verifie qu'elle existe mais je n'arrive pas a l'utiliser comme parametre pour recuperer mon $idCategory comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $categoryId = $em->getRepository('MpkCmsBundle:Category')->findOneBy(array('name' => $categoryName));

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    On comprend a peine ce que tu cherche ,
    essaye avec des var_dump partout pour voir ou ça marche pas , et en cas d'exception tu peux nous la montrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     $category = $form->getData();
           var_dump( $category);exit;
                $categoryName = $category->getName();
                 var_dump( $categoryName);exit;
                //throw $this->createNotFoundException($categoryName);
     
                $categoryId = $em->getRepository('MpkCmsBundle:Category')->findOneBy(array('name' => $categoryName));
                var_dump( $categoryId);exit;
                $services = $em->getRepository('MpkCmsBundle:Service')->findByCategory2($categoryId);
              var_dump( $services);exit;

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    Pour récupérer l'objet service à partir de l'objet category tu n'es pas obligé de passer par nom et ensuite id .
    Une seule requête dans les repositorys peut te donner un array d'objet Service pour un objet Category ( recuperer de la form) en parametre

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Par défaut
    Merci de ton assistance mehrezlabidimehrez pour ce qui est du contenu de la variable $categoryId, elle vaut null lorsque je verifie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw $this->createNotFoundException($categoryId);
    et pour:
    Pour récupérer l'objet service à partir de l'objet category tu n'es pas obligé de passer par nom et ensuite id .
    Une seule requête dans les repositorys peut te donner un array d'objet Service pour un objet Category ( recuperer de la form) en parametre
    sache que je voudrais recuperer plusieurs objets services c'est pour quoi je suis passe par la methode personalisee de repository :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $services = $em->getRepository('MpkCmsBundle:Service')->findByCategory2($categoryId);
    tu l'auras compri je desire utiliser l'id de la category pour recuperer les services uniquement associes a cette category .. bon voila

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    a mon avis je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ///
     if($request->getMethod()=='POST'){
                $form->bind($request);
                $category = $form->getData();
                $services = $em->getRepository('MpkCmsBundle:Service')->findBy(array('category' => $category->getId());
    //
    et pour cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $categoryId = $em->getRepository('MpkCmsBundle:Category')->findOneBy(array('name' => $categoryName));
    tu veux recuperer quoi exactement ? un objet , un entier ou un array meme

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Par défaut
    Je vois que tu commence a me comprendre ... je reviens sur le code que tu m'a suggere:
    quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //Le cas que tu m'a suggere
                $services = $em->getRepository('MpkCmsBundle:Service')->findBy(array('category' => $category->getId()));
                var_dump($services);exit;
    voici le resultat ($services contient tous les services et non seulement ceux qui sont lies a $category->getId()):

    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
     
    array (size=8)
      0 => 
        object(Mpk\CmsBundle\Entity\Service)[671]
          private 'id' => int 4
          protected 'category' => null
          private 'name' => string 'Search Engine Optiomization' (length=27)
      1 => 
        object(Mpk\CmsBundle\Entity\Service)[672]
          private 'id' => int 6
          protected 'category' => null
          private 'name' => string 'Break Fast' (length=10)
      2 => 
        object(Mpk\CmsBundle\Entity\Service)[673]
          private 'id' => int 7
          protected 'category' => null
          private 'name' => string 'Hot Coffee' (length=10)
      3 => 
        object(Mpk\CmsBundle\Entity\Service)[674]
          private 'id' => int 8
          protected 'category' => null
          private 'name' => string 'Plombery' (length=8)
      4 => 
        object(Mpk\CmsBundle\Entity\Service)[675]
          private 'id' => int 9
          protected 'category' => null
          private 'name' => string 'Accommodation' (length=13)
      5 => 
        object(Mpk\CmsBundle\Entity\Service)[676]
          private 'id' => int 10
          protected 'category' => null
          private 'name' => string 'Guest House' (length=11)
      6 => 
        object(Mpk\CmsBundle\Entity\Service)[677]
          private 'id' => int 11
          protected 'category' => null
          private 'name' => string 'Hotel' (length=5)
      7 => 
        object(Mpk\CmsBundle\Entity\Service)[678]
          private 'id' => int 12
          protected 'category' => null
          private 'name' => string 'Beach' (length=5)
    et maintenant quand je me en dure l'id d'une category, j'ai la reponse correcte (seulement les services lies a cet id sont selectionnes):

    le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $services2 = $em->getRepository('MpkCmsBundle:Service')->findBy(array('category' => 1));
                var_dump($services2);exit;

    le resultat:
    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
     
    array (size=3)
      0 => 
        object(Mpk\CmsBundle\Entity\Service)[681]
          private 'id' => int 1
          protected 'category' => 
            object(Proxies\__CG__\Mpk\CmsBundle\Entity\Category)[664]
              public '__initializer__' => 
                object(Closure)[683]
                  ...
              public '__cloner__' => 
                object(Closure)[627]
                  ...
              public '__isInitialized__' => boolean false
              private 'id' (Mpk\CmsBundle\Entity\Category) => int 1
              private 'name' (Mpk\CmsBundle\Entity\Category) => null
          private 'name' => string 'Software development' (length=20)
      1 => 
        object(Mpk\CmsBundle\Entity\Service)[688]
          private 'id' => int 2
          protected 'category' => 
            object(Proxies\__CG__\Mpk\CmsBundle\Entity\Category)[664]
              public '__initializer__' => 
                object(Closure)[683]
                  ...
              public '__cloner__' => 
                object(Closure)[627]
                  ...
              public '__isInitialized__' => boolean false
              private 'id' (Mpk\CmsBundle\Entity\Category) => int 1
              private 'name' (Mpk\CmsBundle\Entity\Category) => null
          private 'name' => string 'Website design' (length=14)
      2 => 
        object(Mpk\CmsBundle\Entity\Service)[689]
          private 'id' => int 3
          protected 'category' => 
            object(Proxies\__CG__\Mpk\CmsBundle\Entity\Category)[664]
              public '__initializer__' => 
                object(Closure)[683]
                  ...
              public '__cloner__' => 
                object(Closure)[627]
                  ...
              public '__isInitialized__' => boolean false
              private 'id' (Mpk\CmsBundle\Entity\Category) => int 1
              private 'name' (Mpk\CmsBundle\Entity\Category) => null
          private 'name' => string 'Mobile application development' (length=30)
    J'espere vraiment que tu vois mon probleme clairement maintenant c'est le $category->getId(); qui est null en effet je sais que cela pourait etre normal car $category n'est pas encore persistee ... mais je me demande si je suis capable de voir l'id de la category en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $category = $form->getData();
                var_dump($category);exit;
    Et resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    object(Mpk\CmsBundle\Entity\Category)[475]
      private 'id' => null
      private 'name' => 
        object(Mpk\CmsBundle\Entity\Category)[643]
          private 'id' => int 1
          private 'name' => string 'ICT / Telecommunication' (length=23)
      public 'services' => 
        object(Doctrine\Common\Collections\ArrayCollection)[476]
          private 'elements' => 
            array (size=0)
              empty
    Alors comment recuperer cet id de valeur 1 dans le cas present (la ligne numero 6) apres la soumission du formulaire ???????????????

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/02/2010, 10h25
  2. Réponses: 2
    Dernier message: 06/05/2007, 12h52
  3. Application se basant sur les cartes et les démarches
    Par condor_01 dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 12/02/2007, 21h23
  4. réaliser un filtre sur les données d'une table
    Par zuzuu dans le forum Langage SQL
    Réponses: 13
    Dernier message: 02/08/2006, 09h07
  5. Réponses: 3
    Dernier message: 07/01/2006, 22h17

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