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 :

formulaire liste entites "vide" [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Par défaut formulaire liste entites "vide"
    Bonjour,
    Je rencontre un petit problème lorsque j'affecte l'index 'choices' d'un type de formulaire entity :

    Cas nominal :
    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
    //...
    // initialisation du tableau de propriétés
    $serverformarray = array(
    		'class' => 'CS\PomAdminBundle\Entity\Server',
    	      	'property' => 'name',
    	        'required' => false, 
    	        'label' => 'Serveur de calcul',
    	      	'expanded' => false,
    	      	'multiple' => false
    		);
     
    // initialisation préalable ( très en amont  ) de la liste de choix 
    $serverChoicesInstances = $options['customOptions']['serverinstances'];
     
    // Affectation pour la liste;
    $serverformarray["choices"] = $serverChoicesInstances;
     
    // construction de la liste
    $builder->add('server', 'entity', $serverformarray);
    //...
    Problème :
    La liste préalable est parfois vide ( nombre d'items = 0 ), cela a du sens fonctionellement.
    Dans ce cas, le formulaire est alors (et bien malgré moi ) automatiquement remplie avec tous les enregistrements en base (ce qui n'est pas voulu ! ).
    Je ne trouve pas de moyen simple d'empêcher cela.
    J'ai utilisé une solution de contournement absolument pas satisfaisante à terme en utilisant le ("query_bulder") avec une requete dont je suis sure qu'elle ne me ramene rien ( et donc un acces base inutile ) .

    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
     
    //...
    // vérifier le nombre d'items ramenés
    if (count($serverChoicesInstances)>0){
    	$serverformarray["choices"] = $serverChoicesInstances;
    	$serverformarray["empty_value"] = "Choisir un serveur de calcul";
    }else {
    	// requete qui ne ramene rien de maniere certaine
    	$serverformarray["query_builder"]=  function(ServerDAO $er) {
    			return $er->createQueryBuilder('srv')->where('srv.id=-1')
     			->orderBy('srv.name', 'ASC');
    	};
    	$serverformarray["empty_value"] ="Il n'y a aucun server de calcul dans la base";
    }
    //...
    Quelqu'un peut-t'il me suggérer quelque chose de mieux?
    Merci

  2. #2
    Membre éclairé
    Profil pro
    IED Web
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : IED Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $serverformarray["choices"] = !empty($serverChoicesInstances) ? serverChoicesInstances : array();
    Peut-etre?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Par défaut
    Dans le code se symfony2, il y a ceci, regarde par toi-même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            if ($this->choices) {
                $entities = $this->choices;
            } else if ($qb = $this->queryBuilder) {
                $entities = $qb->getQuery()->execute();
            } else {
                $entities = $this->em->getRepository($this->class)->findAll();
            }
    Si choices vaut array(), il passe au query_builder ou à la récupération de tout.
    C'est effectivement un soucis dans ton cas...

    J'ai créé un pull request : https://github.com/symfony/symfony/pull/2500

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Par défaut
    Citation Envoyé par RapotOR Voir le message
    J'ai créé un pull request : https://github.com/symfony/symfony/pull/2500
    Cette réponse confirme ce que je soupçonnais, j'aurai effectivement pu aller plus loin et vérifier dans le code .
    Je conserve ma solution de contournement avant d'intégrer la correction sf lors d'une prochaine mise à jour.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Par défaut
    Au cas ou, le PR vient d'être mergé dans master et 2.0!

    https://github.com/symfony/symfony/c...1d6adef18bab47

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/01/2008, 17h02
  2. [Package listings] Commentaires XML et quote
    Par arnobidul dans le forum Mise en forme
    Réponses: 0
    Dernier message: 27/07/2007, 11h54
  3. [débutant] erreur "indice de liste hors limites(1)"
    Par lidouka dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 14h31

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