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 :

Liste déroulante sans doublons dans un Form


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 49
    Points
    49
    Par défaut Liste déroulante sans doublons dans un Form
    Bonsoir à tous,

    j'ai un formulaire dans lequel j'ai un champ type entity qui contient des doublons,j'aimerais que le champ soit sans doublons ,pour cela j'ai appelé mon repository(liste distinct des types de produits) depuis le form:

    voici le 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
    namespace ZX\SodysBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
    use Doctrine\ORM\EntityRepository;
     
    class ProduitType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
          $builder
     
    ->add('typproduit','entity', array('label'=>"Type de produit", 'property' => 'libeltypprod','class' => 'ZX\SodysBundle\Entity\TypProduit',
    				   'query_builder' => function(EntityRepository $er)
    				 {	
    				     return $er->getDistinctLibelle();
    				 })
    				 )
    ->add('designation','text',array('label'=>"Modèle"))
    ;
     
     public function getName()
        {
            return 'zx_sodysbundle_produittype';
        }
    voici le code de mon repository :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class TypProduitRepository extends EntityRepository
    {
    	public function getDistinctLibelle()
    	{
              return $this->createQuerybuilder('t')
    		 ->select('distinct t.libeltypprod')
    		 ->orderBy('t.libeltypprod', 'ASC');
    	}
    }
    lorsque je veux affiché mon formulaire,j'obtiens cette erreur:
    Expected argument of type "object or array", "string" given
    Comment faire pour avoir une liste déroulante sans doublons?

    Merçi d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Points : 47
    Points
    47
    Par défaut
    Te précise t il à quel ligne ou sur quelle fonction il te manque un paramètre?

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 49
    Points
    49
    Par défaut
    Slt,

    il ne met pas de ligne ,c'est dans le log que les lignes existent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ExceptionListener::onKernelException".
    Symfony\Component\Form\Exception\UnexpectedTypeException: Expected argument of type "object or array", "string" given (uncaught exception) at C:\wamp\www\sodys\vendor\symfony\src\Symfony\Component\Form\Util\PropertyPath.php line 202
    Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
    Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest".
    Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
    Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
    Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onKernelRequest".
    Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest".
    Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector::onKernelController".
    Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
    Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
    Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
    Notified event "kernel.controller" to listener "JMS\SecurityExtraBundle\Controller\ControllerListener::onCoreController".
    et en dessous de l’erreur au niveau du stack trace:
    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
    Stack Trace
     
        in C:\wamp\www\sodys\vendor\symfony\src\Symfony\Component\Form\Util\PropertyPath.php at line 202  -+
        at PropertyPath ->getValue ('Climatiseurs')
        in C:\wamp\www\sodys\vendor\symfony\src\Symfony\Bridge\Doctrine\Form\ChoiceList\EntityChoiceList.php at line 184  -+
        at EntityChoiceList ->loadEntities (array('libeltypprod' => 'Climatiseurs'), '0')
        in C:\wamp\www\sodys\vendor\symfony\src\Symfony\Bridge\Doctrine\Form\ChoiceList\EntityChoiceList.php at line 178  -+
        at EntityChoiceList ->loadEntities (array(array('libeltypprod' => 'Climatiseurs'), array('libeltypprod' => 'Machines à laver'), array('libeltypprod' => 'Split Centrale'), array('libeltypprod' => 'Télévision')))
        in C:\wamp\www\sodys\vendor\symfony\src\Symfony\Bridge\Doctrine\Form\ChoiceList\EntityChoiceList.php at line 154  -+
        at EntityChoiceList ->load ()
        in C:\wamp\www\sodys\vendor\symfony\src\Symfony\Component\Form\Extension\Core\ChoiceList\ArrayChoiceList.php at line 46  -+
        at ArrayChoiceList ->getChoices ()
        in C:\wamp\www\sodys\vendor\symfony\src\Symfony\Component\Form\Extension\Core\Type\ChoiceType.php at line 112  -+
        at ChoiceType ->buildView (object(FormView), object(Form))
        in C:\wamp\www\sodys\vendor\symfony\src\Symfony\Component\Form\Form.php at line 917  -+
        at Form ->createView (object(FormView))
        in C:\wamp\www\sodys\vendor\symfony\src\Symfony\Component\Form\Form.php at line 927  -+
        at Form ->createView ()
        in C:\wamp\www\sodys\src\ZX\SodysBundle\Controller\ProduitgescomController.php at line 91  -+
        at ProduitgescomController ->newgescom1Action ()
        at call_user_func_array (array(object(ProduitgescomController), 'newgescom1Action'), array())
        in C:\wamp\www\sodys\app\cache\dev\classes.php at line 3983  -+
        at HttpKernel ->handleRaw (object(Request), '1')
        in C:\wamp\www\sodys\app\cache\dev\classes.php at line 3953  -+
        at HttpKernel ->handle (object(Request), '1', true)
        in C:\wamp\www\sodys\app\cache\dev\classes.php at line 4957  -+
        at HttpKernel ->handle (object(Request), '1', true)
        in C:\wamp\www\sodys\app\bootstrap.php.cache at line 554  -+
        at Kernel ->handle (object(Request))
        in C:\wamp\www\sodys\web\app_dev.php at line 27  -

  4. #4
    Membre du Club Avatar de Parmifer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 39
    Points : 51
    Points
    51
    Par défaut
    Bonjour.

    A priori tu retourne une chaîne de caractère alors que ta fonction attend un tableau ou un objet.

    Cependant, je ne vois pas trop où, dans ton code, se produit l'erreur, sans doute avec ta fonction getDistinctLibelle().

    As-tu vérifié que ta requête était ok et qu'elle te retournait bien les valeurs que tu veux?
    Parmifèr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(cafe <= 0)
    {
        developper = false;
    }

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 49
    Points
    49
    Par défaut
    Bonjour à tous,

    Ma requête marche car lorsque je fais un var_dump voici ce que j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    array (size=4)
      0 => 
        array (size=1)
          'libeltypprod' => string 'Climatiseurs' (length=12)
      1 => 
        array (size=1)
          'libeltypprod' => string 'Machines à laver' (length=17)
      2 => 
        array (size=1)
          'libeltypprod' => string 'Split Centrale' (length=14)
      3 => 
        array (size=1)
          'libeltypprod' => string 'Télévision' (length=12)

  6. #6
    Membre du Club Avatar de Parmifer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 39
    Points : 51
    Points
    51
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    in C:\wamp\www\sodys\vendor\symfony\src\Symfony\Component\Form\Util\PropertyPath.php at line 202  -+
        at PropertyPath ->getValue ('Climatiseurs')
    On voit bien que tu passes seulement 'Climatiseurs' en paramètre à ta fonction PropertyPath->getValue, en d'autre mots, un string.

    C'est donc ici qu'il y a un problème. Je ne sais pas trop à quoi correspond cette méthode ni même si c'est toi qui l'appelle mais je pense que tu devrais essayer de faire en sorte de lui passer un tableau avec par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    array (size=1)
          'libeltypprod' => string 'Climatiseurs'
    Si tu peux me linker le code de ta ligne qui soulève l'exception également, ça pourrait m'aider. Merci.
    Parmifèr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(cafe <= 0)
    {
        developper = false;
    }

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 49
    Points
    49
    Par défaut
    En fait le code qui m'envoie l'exception est déjà posté: c'est le code du formulaire et le repository

  8. #8
    Membre du Club Avatar de Parmifer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 39
    Points : 51
    Points
    51
    Par défaut
    EDIT : Oublie ce que je viens de dire, j'ai trouvé une solution.

    C'est ça qui pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'property' => 'libeltypprod'
    Tu peux aller voir de ce côté là, pour changer ton string en objet.

    http://symfony.com/fr/doc/master/coo...nsformers.html

    Tu peux aussi ajouter un group by dans ton repository, tu fais ce qui te semble être le mieux. Les deux devraient marcher.
    Parmifèr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(cafe <= 0)
    {
        developper = false;
    }

Discussions similaires

  1. [E-03] - Liste déroulante sans doublons
    Par damsmut dans le forum Excel
    Réponses: 15
    Dernier message: 18/02/2008, 18h28
  2. [SQL] liste déroulante sans doublons
    Par crashdown31 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/06/2007, 20h48
  3. Formulaire : liste déroulante sans doublon
    Par schdam dans le forum Modélisation
    Réponses: 2
    Dernier message: 17/06/2007, 18h21
  4. [Formulaire]liste déroulante sans doublon
    Par kovrov dans le forum IHM
    Réponses: 15
    Dernier message: 01/04/2007, 20h09
  5. [Formulaire]Liste déroulante sans doublons
    Par frevale dans le forum IHM
    Réponses: 2
    Dernier message: 22/03/2007, 21h54

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