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 :

Convertir un array en résultat compatible query_builder [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut Convertir un array en résultat compatible query_builder
    Bonjour,

    Dans un formulaire, je fais appel à une méthode d'un repository de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                ->add('localite','entity', array('class'=>'Hotels\GestionAnnoncesBundle\Entity\Localite',
                                                 'query_builder' => function(LocaliteRepository $er) use ($region)
                                                                      {
                                                                       return $er->getLocalitesByElem($region->getId(), 'region');
                                                                      }, 
                                                 'required' => false))
            ;
    Voici la méthode que j'ai écrite pour une question de ré-utilisabilité :

    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
     public function getLocalitesByElem($idElemInit, $typeElemInit)
    	{	
    		$em = $this->getEntityManager();
     
        switch($typeElemInit)
         {
          case 'commune':
            $obj = $em->getRepository('HotelsGestionAnnoncesBundle:Commune')->find($idElemInit);
          break;
     
          case 'province':
            $obj = $em->getRepository('HotelsGestionAnnoncesBundle:Province')->find($idElemInit);
          break;
     
          case 'departement':
            $obj = $em->getRepository('HotelsGestionAnnoncesBundle:Departement')->find($idElemInit);
          break;
     
          case 'region':
           $obj = $em->getRepository('HotelsGestionAnnoncesBundle:Region')->find($idElemInit);
          break;
     
          default:
            $obj = $em->getRepository('HotelsGestionAnnoncesBundle:Pays')->find($idElemInit);
          break;
         }
     
        if($typeElemInit == 'commune')
         {
          $localites = $obj->getLocalites();      
         }
        else
         {      
          $communes = $obj->getCommunes();
     
          $localites = array();
     
          foreach ($communes as $com)
           {
            foreach ($com->getLocalites() as $locByCom)
             {
              $localites[] = $locByCom;
             }        
           }
         }
     
        return $localites;
    	}
    Cependant, j'obtiens cette erreur :

    Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given
    Comment pourrais-je exploiter mon array retourné dans mon formulaire pour assigner le tableau d'objets au champ 'localite'?

    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    J'ai tenté cette solution :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Code :Sélectionner tout - Visualiser dans une fenêtre à part123456         ->add('localite','entity', array('class'=>'Hotels\GestionAnnoncesBundle\Entity\Localite',
                                                 'choices' => function(LocaliteRepository $er) use ($region)
                                                                      {
                                                                       return $er->getLocalitesByElem($region->getId(), 'region');
                                                                      }, 
                                                 'required' => false))
    Cependant, j'obtiens l'erreur suivante :


    Citation:[
    Catchable Fatal Error: Argument 1 passed to Hotels\GestionAnnoncesBundle\Form\{closure}() must be an instance of Hotels\GestionAnnoncesBundle\Entity\LocaliteRepository, none given in C:\wamp\www\Symfony\src\Hotels\GestionAnnoncesBundle\Form\AdresseType.php line 23
    Or, j'ai bien ceci au début de mon formulaire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hotels\GestionAnnoncesBundle\Entity\LocaliteRepository;

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Points : 153
    Points
    153
    Par défaut
    franchement je n'ai jamais fait sa! donc je peux pas t'aider sur cette erreur par contre localite est dans ton Form AdresseType c'est bien?? Moi je te conseil d'appeler la fonction dans ton contrôleur et de passer le tableau en paramètre afin d'éviter d'appeler ton fonction N fois la génération d'adresse. De plus pour ton fichier LocaliteRepository je n'utiliserai pas le foreach alors que tu peux faire autrement !! tu prends des ressources pour rien... enfin j'espère que sa t'aidera!! Mais essaie de passer le tableau en paramètre !

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Un tout grand merci pour ton aide!

    En passant le tableau en paramètre depuis mon controller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
     
    $localites = $em->getRepository('HotelsGestionAnnoncesBundle:Localite')->getLocalitesByElem($region->getId(), 'region');
     
            $adresse= new Adresse();
            $form   = $this->createForm(new AdresseType($region, $localites), $adresse);
     
    ...
    et en l'affectant à l'index 'choices'

    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
    ...
     
        public function __construct($region, $localites)
        {
            $this->region = $region;
            $this->localites = $localites;
        }
     
    ...
     
    class AdresseType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $region = $this->region;
            $localites = $this->localites;
     
    ...
     
            $builder
     
    ...
     
                ->add('localite','entity', array('class'=>'Hotels\GestionAnnoncesBundle\Entity\Localite',
                                                 'choices' => $localites, 
                                                 'required' => false))
    ça fonctionne nickel!

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

Discussions similaires

  1. script php pour convertir un array en xml
    Par omar24 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 02/03/2011, 14h22
  2. Récupérer les données d'un Datagrid et les convertir en Array
    Par Invité dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 22/12/2010, 21h13
  3. Convertir Cell array en Double array
    Par anouaraz dans le forum MATLAB
    Réponses: 6
    Dernier message: 27/05/2010, 16h46
  4. Convertir un array<Byte>^ en unsigned char*
    Par xxiemeciel dans le forum C++/CLI
    Réponses: 5
    Dernier message: 12/06/2007, 20h23
  5. Réponses: 7
    Dernier message: 26/04/2007, 18h05

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