Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-09-2011 17:34:56

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Zend Form : empêcher qu'un champ soit rempli automatiquement ?

Bonjour smile,

Dans un de mes formulaires, j'utilise un système d'auto-completion pour que l'utilisateur définisse sa ville à partir du code postal.

J'ai donc un champ zipCode de type text et un champ city de type select, que je remplie dynamiquement en Ajax dès que l'utilisateur a rentré un code postal valide.

Si plusieurs villes partagent le même code postal, alors j'affiche toutes les villes dans le <select> et en plus, j'ajoute en haut de la liste une valeur "Sélectionnez une ville".

Si l'utilisateur oublie de sélectionner la ville dans le select, le serveur récupère donc une valeur "-1" qui ne correspond à aucune ville. LE SOUCIS, c'est que Zend ne sait pas, apparemment, faire de l'auto-fill sur le <select>, et par conséquent me vide le <select>, MAIS me laisse le code postal, ce qui pose soucis (car le code postal est affiché, mais pas les villes...).

Du coup, j'aimerais pouvoir faire en sorte que, si le formulaire n'est pas valide, soit Zend m'auto-remplisse les sélect ou alors qu'il ne m'auto-remplisse pas le champ zipCode. Sauf que je n'ai pas réussi à trouver comment. J'ai tenté en surchargeant setDefaults ou en donnant une valeur par défaut à la construction de l'élément, mais rien à faire, si je tape par exemple 51300 et que je valide le formulaire sans choisir la ville, et bien il me remet 51300 dans le zip code... hmm

Merci de votre aide !

Hors ligne

 

#2 28-09-2011 09:27:25

flilou
Membre
Date d'inscription: 09-05-2011
Messages: 23

Re: Zend Form : empêcher qu'un champ soit rempli automatiquement ?

Bonjour Bakura,

Tout d'abord tes champs "code postal" et "ville' sont ils obligatoires? Si oui, si tu leur rajoutes un validateur notEmpty, lors de la validation de ton formulaire, si l'un de ces deux champs n'est pas renseigné, le formulaire ne sera pas validé et tu peux mettre à 0 le champ "code postal".
Sinon, peux-tu mettre le code du formulaire dans lequel sont définis ces deux éléments pour que l'on puisse t'aider.

Hors ligne

 

#3 28-09-2011 10:14:04

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: Zend Form : empêcher qu'un champ soit rempli automatiquement ?

Salut,

Non, ces deux champs sont optionnels. Par contre, si l'utilisateur rentre le code postal, alors la ville "devient" obligatoire (via un validateur qui vérifie que le champ existe bien en base). Les deux éléments du formulaire en question :

Code:

$this->addElement('text', 'zipCode', array(
                'decorators' => $this->elementDecorators,
                'label' => 'Code postal :',
                'validators' => array(
                    'PostCode',
                    array('RecordExists', false, array('entity' => 'Model\City', 'field' => 'zipCode'))
                ),
                'ignore' => true
            ));
                        
            $this->addElement('select', 'city', array(
                'decorators' => $this->elementDecorators,
                'label' => 'Ville :',
                'validators' => array(
                    array('RecordExists', false, array('entity' => 'Model\City', 'field' => 'id'))
                ),
                'registerInArrayValidator' => false
            ));

Quelques précisions : le champ "zipCode" est noté en ignore car je n'ai qu'un champ "city" dans mon modèle.

Concrètement, si je tape 94360 dans le champ "zipCode", une requête Ajax est faite et la ville "Bry-sur-Marne" est ajoutée automatiquement dans le "select" du ville. Ici pas de problème, il n'y a qu'une seule ville possible donc elle est sélectionnée par défaut et on ne peut pas la changer.

Le soucis intervient avec un code postal comme 51300 qui renvoit une cinquantaine de villes. Plutôt que d'en sélectionner une par défaut, j'ai préféré rajouter une première option dans le select qui contient une valeur non présente en base (-1) et le texte "Sélectionnez une ville". Et si effectivement l'utilisateur laisse le select sur "Sélectionnez une ville" (et dans ce cas, un validateur NotEmpty n'y changerait rien puisqu'une valeur est bien sélectionnée) j'ai le soucis expliqué plus haut, à savoir qu'il me dit que la ville d'identifiant -1 n'existe pas, et lorsque le formulaire se recharge, le code postal est toujours pré-rempli (51300) mais le select est vide (puisqu'il a été remplie avec de l'Ajax et non directement par Zend_Form).

Si c'est pas très clair je créerai une page exemple smile.

Dernière modification par bakura (28-09-2011 10:20:09)

Hors ligne

 

#4 28-09-2011 11:47:24

flilou
Membre
Date d'inscription: 09-05-2011
Messages: 23

Re: Zend Form : empêcher qu'un champ soit rempli automatiquement ?

Soit au lieu de mettre '-1' comme valeur correspondant à "aucune ville" tu peux mettre '0', et dans ce cas, tu peux utiliser le validateur NOTEMPTY en utilisant l'option ZERO comme ci-dessous:

Code:

$validator = new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::ZERO); // retourne false pour '0'

(cf. la doc. officielle).

Sinon ce que tu peux faire également, c'est créer un validateur personnalisé pour gérer ce problème.

Une fois que tu valides, si une erreur est lancée (ici lorsque la ville n'a pas été renseignée) tu peux réinitialisé ton champ "zipCode" via ton formulaire, en faisant un truc du genre:

Code:

if ($form->isValid(){
         // tu fais ce que t'as à faire (enregistrement en base de données....)
} else{
        ...
       $form->getElement('zipCode')->setValue(NULL); // tu le mets à null.
       ...
}

A toi de voir si ça te convient....

Dernière modification par flilou (28-09-2011 11:48:06)

Hors ligne

 

#5 28-09-2011 11:49:04

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: Zend Form : empêcher qu'un champ soit rempli automatiquement ?

Je connaissais pas la possibilité de NotEmpty de retourner faux pour zéro. Hélas j'ai un identifiant en base qui vaut zéro. Je regarderais du côté du validateur personnalisé (même si c'est un peu chiant).

Merci smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages