Dans ton cas, voilà comment je procède :

  - tableau avec les choix (si ça ne provient pas de la base) avec parfois
une classe qui gère cela.

  - widget avec paramètre array('' => '') + tableau des choix

  - validator avec un array_flip(tableau des choix) (ou la fonction qui
inverse les clés et les valeurs si ce n'est pas celle-là)

  - option required => true pour le validator si la donnée est obligatoire

Ainsi, si le champ est obligatoire, il apparaît d'abord vide et force
l'utilisateur à faire son choix car sinon il a une erreur (required).


-----Message d'origine-----
De : symfony-fr@googlegroups.com [mailto:symfony...@googlegroups.com] De la
part de Tugdual SAUNIER
Envoyé : mercredi 5 janvier 2011 23:52
À : symfony-fr@googlegroups.com
Objet : Re: [symfony-fr] validator liste déroulante

désolé mauvais copié/coller, je voulais parler du widget ;)
---
Tugdual Saunier
tugdual.saun...@gmail.com
GTalk: tucks...@gmail.com skype: tucksaun
----------------------------------
Pensez environnement !
N'imprimez cet mail que si c'est vraiment nécessaire



Le 5 janvier 2011 23:42, manuel brossard <mbross...@infonel.net> a écrit :
> Généré par
>
> 500 | Internal Server Error | InvalidArgumentException
>
> sfValidatorChoice does not support the following options: 'add_empty'.
>
> Le 5 janvier 2011 23:41, manuel brossard <mbross...@infonel.net> a écrit :
>>
>> Bien tenté, j 'ai une erreur 500 !
>>
>> Le 5 janvier 2011 23:34, Tugdual SAUNIER <tugdual.saun...@gmail.com> 
>> a écrit :
>>>
>>> essaye ça :
>>> 'socialrelation'  => new
>>> sfValidatorChoice(array('add_empty'=>'Choisissez' ,'choices'  => 
>>> self::$liensocial)), et rajoute 'required'=>true au validateur en 
>>> virant 0 => 'Choisissez' de self::$liensocial
>>>
>>> ---
>>> Tugdual Saunier
>>> tugdual.saun...@gmail.com
>>>
>>> Le 5 janvier 2011 19:47, manuel brossard <mbross...@infonel.net> a 
>>> écrit
>>> :
>>> >
>>> >
>>> >
>>> > 'socialrelation'  => new sfValidatorChoice(array('choices'  => 
>>> > self::$liensocial)),
>>> >
>>> >
>>> > ESt impossible à valider..
>>> >
>>> > OU trouver une doc intelligible sur les widgets
>>> >
>>> >
>>> > Valider un choix dans une liste exemple :
>>> >
>>> > J' ai une liste de département dans un formulaire je veux que l'
>>> > utilisateur sélectionne son département  et ne laisse pas la 
>>> > première valeur (ain ou vide. ) juste parce qu' il a oublié.
>>> >
>>> > C 'est de l' ultra classique ! mais bon ça doit être trop simple..
>>> >
>>> > En fait quand c' est déjà codé c 'est bien d' avoir la doc 
>>> > exhaustif sinon j' ai juste l' enfer. ET symfony devient une
cacophonie !
>>> >
>>> >
>>> > Le 5 janvier 2011 15:36, manuel brossard <mbross...@infonel.net> a 
>>> > écrit :
>>> >>
>>> >> Ben non ..
>>> >>
>>> >>
>>> >> et si j' ajoute pas la valeur nulle dans le widget la liste 
>>> >> contient les valeurs possibles et donc c 'est encore car en cas 
>>> >> d' oubli c "est le premier choix de la liste qui sera enregistré.
>>> >>
>>> >>
>>> >>
>>> >> Le 5 janvier 2011 14:49, Lélio ML <mailing-l...@lelio.fr> a écrit :
>>> >>>
>>> >>> Le required => true devrait fonctionner.
>>> >>>
>>> >>> Sinon, dans l'option choices du sfValidatorFormChoice, il ne 
>>> >>> faut pas que la chaine vide '' soit présente.
>>> >>>
>>> >>> -----Message d'origine-----
>>> >>> De : symfony-fr@googlegroups.com 
>>> >>> [mailto:symfony...@googlegroups.com]
>>> >>> De la
>>> >>> part de manuel brossard
>>> >>> Envoyé : mercredi 5 janvier 2011 14:41 À : 
>>> >>> symfony-fr@googlegroups.com Objet : Re: [symfony-fr] validator 
>>> >>> liste déroulante
>>> >>>
>>> >>> Ben si le premier élément est 'choisissez" le can_be_empty 
>>> >>> =>false ne marchera pas,  et le champs est forcement requis 
>>> >>> puisque c' est une liste déroulante.
>>> >>>
>>> >>> Cela fonctionnera qu' avec premier élément vide.
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> Le 5 janvier 2011 14:33, ASSO Anthony <anthony.a...@gmail.com> a 
>>> >>> écrit :
>>> >>>
>>> >>>
>>> >>>        Rajoute l'option: can_be_empty =>false ou required=>true 
>>> >>> selon ton utilisation.
>>> >>>
>>> >>>
>>> >>>
>>> >>>        2011/1/5 manuel brossard <mbross...@infonel.net>:
>>> >>>        > Oui j' ai plus d' erreur mais la validation est 
>>> >>> toujours bonne même si il
>>> >>>        > n'  y a pas eu de choix.
>>> >>>        >
>>> >>>        > L' idée c' est d 'obliger à faire un choix autre que le 
>>> >>> premier de la liste
>>> >>>        > (champs vide ou indicatif.. )
>>> >>>        >
>>> >>>        >
>>> >>>        > Le 5 janvier 2011 13:07, mohamed elharouachi 
>>> >>> <elharoua...@gmail.com> a écrit
>>> >>>        > :
>>> >>>        >>
>>> >>>        >> 'socialrelation'  => new sfValidatorChoice(array('choices'
>>> >>>  =>
>>> >>>        >> array_keys(self::$liensocial))),
>>> >>>        >>
>>> >>>        >> Le 5 janvier 2011 12:06, ASSO Anthony 
>>> >>> <anthony.a...@gmail.com> a écrit :
>>> >>>        >>>
>>> >>>        >>> essaye ca:
>>> >>>        >>>
>>> >>>        >>> new sfValidatorChoice(array(
>>> >>>        >>>      'choices' => array_keys(self::$liensocial)
>>> >>>        >>>    ));
>>> >>>        >>>
>>> >>>        >>> 2011/1/5 manuel brossard <mbross...@infonel.net>:
>>> >>>        >>> > 'socialrelation'  => new
>>> >>>        >>> > 
>>> >>> sfValidatorString(array(array_keys(self::$liensocial))),
>>> >>>        >>> >
>>> >>>        >>> >
>>> >>>        >>> > génère une erreur 500.
>>> >>>        >>> >
>>> >>>        >>> >
>>> >>>        >>> >
>>> >>>        >>> > Le 5 janvier 2011 08:42, ASSO Anthony 
>>> >>> <anthony.a...@gmail.com> a écrit
>>> >>>        >>> > :
>>> >>>        >>> >>
>>> >>>        >>> >> Bonjour,
>>> >>>        >>> >>
>>> >>>        >>> >> pour ton premier pb:
>>> >>>        >>> >>
>>> >>>        >>> >> Dans le validator, il faut mettre
>>> >>>        >>> >> array(array_keys(self::$liensocial))) en premier 
>>> >>> argument. il
>>> >>>        >>> >> t'obligera donc à avoir une element de ta liste.
>>> >>>        >>> >>
>>> >>>        >>> >> Dans le deuxième argument, tu personnalises ton 
>>> >>> messsage ou en faisant
>>> >>>        >>> >> un setMessage() après la déclaration du validator
>>> >>>        >>> >>
>>> >>>        >>> >> Bonne journée.
>>> >>>        >>> >>
>>> >>>        >>> >> 2011/1/4 mantex <m...@infonel.net>:
>>> >>>        >>> >> > Bonsoir,
>>> >>>        >>> >> >
>>> >>>        >>> >> >
>>> >>>        >>> >> >
>>> >>>        >>> >> > J ' essai de gérer utiliser le validator 
>>> >>> sfValidatorString pour
>>> >>>        >>> >> > obliger le choix parmi  une liste déroulante.
>>> >>>        >>> >> >
>>> >>>        >>> >> > Voici un extrait de ma classe:
>>> >>>        >>> >> >
>>> >>>        >>> >> > protected static
>>> >>>        >>> >> > $liensocial = array(0 => 'Choisissez', 1 => 
>>> >>> 'Hierarchie', 2 =>
>>> >>>        >>> >> > 'Pair',
>>> >>>        >>> >> > 3 => 'Collaborateur', 4 =>'Exterieur');
>>> >>>        >>> >> >
>>> >>>        >>> >> >
>>> >>>        >>> >> > $this->widgetSchema['socialrelation'] = new 
>>> >>> sfWidgetFormSelect
>>> >>>        >>> >> > (array('choices' => self::$liensocial));
>>> >>>        >>> >> >
>>> >>>        >>> >> >  'socialrelation'  => new 
>>> >>> sfValidatorString(array('min_length' =>
>>> >>>        >>> >> > 1)),
>>> >>>        >>> >> >
>>> >>>        >>> >> > Mais cela ne fait pas le job , je n' ai d' 
>>> >>> ailleurs pas trouvé
>>> >>>        >>> >> > comment
>>> >>>        >>> >> > personnalisé le message en remplacement 'champ 
>>> >>> is too short' dans le
>>> >>>        >>> >> > cas ou la condition n' est pas remplie.
>>> >>>        >>> >> >
>>> >>>        >>> >> >
>>> >>>        >>> >> >
>>> >>>        >>> >> > --
>>> >>>        >>> >> > Vous recevez ce message, car vous êtes abonné au 
>>> >>> groupe Google
>>> >>>        >>> >> > Groupes Symfony-fr.
>>> >>>        >>> >> > Pour envoyer un message à ce groupe, adressez un 
>>> >>> e-mail
>>> >>>        >>> >> > à symfony...@googlegroups.com.
>>> >>>        >>> >> > Pour vous désabonner de ce groupe, envoyez un 
>>> >>> e-mail à l'adresse
>>> >>>        >>> >> > symfony-fr+unsubscr...@googlegroups.com
>>> >>> <mailto:symfony-fr%2bunsubscr...@googlegroups.com> .
>>> >>>        >>> >> > Pour plus d'options, consultez la page de ce groupe
:
>>> >>>        >>> >> > http://groups.google.com/group/symfony-fr?hl=fr
>>> >>>        >>> >> >
>>> >>>        >>> >> >
>>> >>>        >>> >>
>>> >>>        >>> >>
>>> >>>        >>> >>
>>> >>>        >>> >> --
>>> >>>        >>> >> Anthony ASSO
>>> >>>        >>> >> 4 Rue de Bayeux - Apt. 529
>>> >>>        >>> >> 31300 TOULOUSE
>>> >>>        >>> >> ---
>>> >>>        >>> >> Tel: 06.25.74.04.29
>>> >>>        >>> >> anthony.a...@gmail.com
>>> >>>        >>> >>
>>> >>>        >>> >> --
>>> >>>        >>> >> Vous recevez ce message, car vous êtes abonné au 
>>> >>> groupe Google
>>> >>>        >>> >> Groupes Symfony-fr.
>>> >>>        >>> >> Pour envoyer un message à ce groupe, adressez un 
>>> >>> e-mail
>>> >>>        >>> >> à symfony...@googlegroups.com.
>>> >>>        >>> >> Pour vous désabonner de ce groupe, envoyez un 
>>> >>> e-mail à l'adresse
>>> >>>        >>> >> symfony-fr+unsubscr...@googlegroups.com
>>> >>> <mailto:symfony-fr%2bunsubscr...@googlegroups.com> .
>>> >>>        >>> >> Pour plus d'options, consultez la page de ce groupe :
>>> >>>        >>> >> http://groups.google.com/group/symfony-fr?hl=fr
>>> >>>        >>> >>
>>> >>>        >>> >
>>> >>>        >>> >
>>> >>>        >>> >
>>> >>>        >>> > --
>>> >>>        >>> > Cordialement,
>>> >>>        >>> >
>>> >>>        >>> > Manuel Brossard
>>> >>>        >>> > Twitter: twitter.com/infonel
>>> >>>        >>> > Skype : mantex2039
>>> >>>        >>> >
>>> >>>        >>> > Tel: + 33 9 72 17 00 41
>>> >>>        >>> >
>>> >>>        >>> > --
>>> >>>        >>> > Vous recevez ce message, car vous êtes abonné au 
>>> >>> groupe Google
>>> >>>        >>> > Groupes Symfony-fr.
>>> >>>        >>> > Pour envoyer un message à ce groupe, adressez un 
>>> >>> e-mail
>>> >>>        >>> > à symfony...@googlegroups.com.
>>> >>>        >>> > Pour vous désabonner de ce groupe, envoyez un 
>>> >>> e-mail à l'adresse
>>> >>>        >>> > symfony-fr+unsubscr...@googlegroups.com
>>> >>> <mailto:symfony-fr%2bunsubscr...@googlegroups.com> .
>>> >>>        >>> > Pour plus d'options, consultez la page de ce groupe :
>>> >>>        >>> > http://groups.google.com/group/symfony-fr?hl=fr
>>> >>>        >>> >
>>> >>>        >>>
>>> >>>        >>>
>>> >>>        >>>
>>> >>>        >>> --
>>> >>>        >>> Anthony ASSO
>>> >>>        >>> 4 Rue de Bayeux - Apt. 529
>>> >>>        >>> 31300 TOULOUSE
>>> >>>        >>> ---
>>> >>>        >>> Tel: 06.25.74.04.29
>>> >>>        >>> anthony.a...@gmail.com
>>> >>>        >>>
>>> >>>        >>> --
>>> >>>        >>> Vous recevez ce message, car vous êtes abonné au 
>>> >>> groupe Google
>>> >>>        >>> Groupes Symfony-fr.
>>> >>>        >>> Pour envoyer un message à ce groupe, adressez un 
>>> >>> e-mail
>>> >>>        >>> à symfony...@googlegroups.com.
>>> >>>        >>> Pour vous désabonner de ce groupe, envoyez un e-mail 
>>> >>> à l'adresse
>>> >>>        >>> symfony-fr+unsubscr...@googlegroups.com
>>> >>> <mailto:symfony-fr%2bunsubscr...@googlegroups.com> .
>>> >>>        >>> Pour plus d'options, consultez la page de ce groupe :
>>> >>>        >>> http://groups.google.com/group/symfony-fr?hl=fr
>>> >>>        >>>
>>> >>>        >>
>>> >>>        >>
>>> >>>        >>
>>> >>>        >> --
>>> >>>        >>
>>> >>>        >> MOHAMED EL HAROUACHI
>>> >>>        >> Ingénieur d'études et de développement
>>> >>>        >> Smile Maroc
>>> >>>        >> Smile – Open Source Solutions
>>> >>>        >> www.smile.fr
>>> >>>        >>
>>> >>>        >> Tél : (+212) 522 27 13 74 / +212 5 22 27 49 89
>>> >>>        >> Fax : (+212) 522 27 13 74
>>> >>>        >> Mob : (+212) 678403494
>>> >>>        >> Mail : elharoua...@gmail.com
>>> >>>        >>
>>> >>>        >> --
>>> >>>        >> Vous recevez ce message, car vous êtes abonné au 
>>> >>> groupe Google
>>> >>>        >> Groupes Symfony-fr.
>>> >>>        >> Pour envoyer un message à ce groupe, adressez un 
>>> >>> e-mail
>>> >>>        >> à symfony...@googlegroups.com.
>>> >>>        >> Pour vous désabonner de ce groupe, envoyez un e-mail à 
>>> >>> l'adresse
>>> >>>        >> symfony-fr+unsubscr...@googlegroups.com
>>> >>> <mailto:symfony-fr%2bunsubscr...@googlegroups.com> .
>>> >>>        >> Pour plus d'options, consultez la page de ce groupe :
>>> >>>        >> http://groups.google.com/group/symfony-fr?hl=fr
>>> >>>        >
>>> >>>        >
>>> >>>        >
>>> >>>        > --
>>> >>>        > Cordialement,
>>> >>>        >
>>> >>>        > Manuel Brossard
>>> >>>        > Twitter: twitter.com/infonel
>>> >>>        > Skype : mantex2039
>>> >>>        >
>>> >>>        > Tel: + 33 9 72 17 00 41
>>> >>>        >
>>> >>>        > --
>>> >>>        > Vous recevez ce message, car vous êtes abonné au groupe 
>>> >>> Google
>>> >>>        > Groupes Symfony-fr.
>>> >>>        > Pour envoyer un message à ce groupe, adressez un e-mail
>>> >>>        > à symfony...@googlegroups.com.
>>> >>>        > Pour vous désabonner de ce groupe, envoyez un e-mail à 
>>> >>> l'adresse
>>> >>>        > symfony-fr+unsubscr...@googlegroups.com
>>> >>> <mailto:symfony-fr%2bunsubscr...@googlegroups.com> .
>>> >>>        > Pour plus d'options, consultez la page de ce groupe :
>>> >>>        > http://groups.google.com/group/symfony-fr?hl=fr
>>> >>>        >
>>> >>>
>>> >>>
>>> >>>
>>> >>>        --
>>> >>>        Anthony ASSO
>>> >>>        4 Rue de Bayeux - Apt. 529
>>> >>>        31300 TOULOUSE
>>> >>>        ---
>>> >>>        Tel: 06.25.74.04.29
>>> >>>        anthony.a...@gmail.com
>>> >>>
>>> >>>        --
>>> >>>        Vous recevez ce message, car vous êtes abonné au groupe 
>>> >>> Google Groupes Symfony-fr.
>>> >>>        Pour envoyer un message à ce groupe, adressez un e-mail à 
>>> >>> symfony...@googlegroups.com.
>>> >>>        Pour vous désabonner de ce groupe, envoyez un e-mail à 
>>> >>> l'adresse
>>> >>> symfony-fr+unsubscr...@googlegroups.com
>>> >>> <mailto:symfony-fr%2bunsubscr...@googlegroups.com> .
>>> >>>        Pour plus d'options, consultez la page de ce groupe :
>>> >>> http://groups.google.com/group/symfony-fr?hl=fr
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> --
>>> >>> Cordialement,
>>> >>>
>>> >>> Manuel Brossard
>>> >>> Twitter: twitter.com/infonel
>>> >>> Skype : mantex2039
>>> >>>
>>> >>> Tel: + 33 9 72 17 00 41
>>> >>>
>>> >>>
>>> >>>
>>> >>> --
>>> >>> Vous recevez ce message, car vous êtes abonné au groupe Google 
>>> >>> Groupes Symfony-fr.
>>> >>> Pour envoyer un message à ce groupe, adressez un e-mail à 
>>> >>> symfony...@googlegroups.com.
>>> >>> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
>>> >>> symfony-fr+unsubscr...@googlegroups.com.
>>> >>> Pour plus d'options, consultez la page de ce groupe :
>>> >>> http://groups.google.com/group/symfony-fr?hl=fr
>>> >>>
>>> >>>
>>> >>> --
>>> >>> Vous recevez ce message, car vous êtes abonné au groupe Google 
>>> >>> Groupes Symfony-fr.
>>> >>> Pour envoyer un message à ce groupe, adressez un e-mail à 
>>> >>> symfony...@googlegroups.com.
>>> >>> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
>>> >>> symfony-fr+unsubscr...@googlegroups.com.
>>> >>> Pour plus d'options, consultez la page de ce groupe :
>>> >>> http://groups.google.com/group/symfony-fr?hl=fr
>>> >>>
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> Cordialement,
>>> >>
>>> >> Manuel Brossard
>>> >> Twitter: twitter.com/infonel
>>> >> Skype : mantex2039
>>> >>
>>> >> Tel: + 33 9 72 17 00 41
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> > Cordialement,
>>> >
>>> > Manuel Brossard
>>> > Twitter: twitter.com/infonel
>>> > Skype : mantex2039
>>> >
>>> > Tel: + 33 9 72 17 00 41
>>> >
>>> > --
>>> > Vous recevez ce message, car vous êtes abonné au groupe Google 
>>> > Groupes Symfony-fr.
>>> > Pour envoyer un message à ce groupe, adressez un e-mail à 
>>> > symfony...@googlegroups.com.
>>> > Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
>>> > symfony-fr+unsubscr...@googlegroups.com.
>>> > Pour plus d'options, consultez la page de ce groupe :
>>> > http://groups.google.com/group/symfony-fr?hl=fr
>>>
>>> --
>>> Vous recevez ce message, car vous êtes abonné au groupe Google 
>>> Groupes Symfony-fr.
>>> Pour envoyer un message à ce groupe, adressez un e-mail à 
>>> symfony...@googlegroups.com.
>>> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
>>> symfony-fr+unsubscr...@googlegroups.com.
>>> Pour plus d'options, consultez la page de ce groupe :
>>> http://groups.google.com/group/symfony-fr?hl=fr
>>>
>>
>>
>>
>> --
>> Cordialement,
>>
>> Manuel Brossard
>> Twitter: twitter.com/infonel
>> Skype : mantex2039
>>
>> Tel: + 33 9 72 17 00 41
>>
>
>
>
> --
> Cordialement,
>
> Manuel Brossard
> Twitter: twitter.com/infonel
> Skype : mantex2039
>
> Tel: + 33 9 72 17 00 41
>
> --
> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes 
> Symfony-fr.
> Pour envoyer un message à ce groupe, adressez un e-mail à 
> symfony...@googlegroups.com.
> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
> symfony-fr+unsubscr...@googlegroups.com.
> Pour plus d'options, consultez la page de ce groupe :
> http://groups.google.com/group/symfony-fr?hl=fr
>

--
Vous recevez ce message, car vous êtes abonné au groupe Google
Groupes Symfony-fr.
Pour envoyer un message à ce groupe, adressez un e-mail
à symfony...@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
symfony-fr+unsubscr...@googlegroups.com.
Pour plus d'options, consultez la page de ce groupe :
http://groups.google.com/group/symfony-fr?hl=fr


-- 
Vous recevez ce message, car vous êtes abonné au groupe Google 
Groupes Symfony-fr.
Pour envoyer un message à ce groupe, adressez un e-mail 
à symfony...@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse 
symfony-fr+unsubscr...@googlegroups.com.
Pour plus d'options, consultez la page de ce groupe : 
http://groups.google.com/group/symfony-fr?hl=fr

Répondre à