Justement la normalement tu devrais pouvoir avoir le champs vide même avec le setRequired c'est le but du code que je t'ai ajouté.
Version imprimable
Justement la normalement tu devrais pouvoir avoir le champs vide même avec le setRequired c'est le but du code que je t'ai ajouté.
J'ai essayé de le rajouter à la fin, et ça ne marchait pas. Par contre, si je le rajoute avant le setLabel, setRequired addFilter ou addValidator, il me dit par la suite que mon "$pass1" n'est plus un objet.
Si je résume bien, mon code au final devrait ressembler à ça ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 $pass1 = $this->createElement('password', 'pass1'); $pass1->setLabel('Mot de passe') ->addFilter('StripTags') ->addFilter('StringTrim') ->setRequired(true) ->setAllowEmpty(true) ->autoInsertNotEmptyValidator(false); $pass2 = $this->createElement('password', 'pass2'); $pass2->setLabel('Confirmer mot de passe') ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('identical', true, array('token' => 'pass1'));
Non du tout, il devrait ressembler à ça :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $pass1 = $this->createElement('password', 'pass1'); $pass1->setLabel('Mot de passe') ->addFilter('StripTags') ->addFilter('StringTrim'); $pass2 = $this->createElement('password', 'pass2'); $pass2->setLabel('Confirmer mot de passe') ->addFilter('StripTags') ->addFilter('StringTrim') ->setAllowEmpty(true) ->setRequired(true) ->autoInsertNotEmptyValidator(false) ->addValidator('identical', true, array('token' => 'pass1'));
Oups, je me suis trompé dans mon copier/coller sur le forum :oops:
C'est bien ce que j'avais écrit dans mon code, mais il me retourneJ'ai essayé en inversant les 2 dernières lignes, mais dans ce cas le setRequired m'empêche de laisser le champ vide :?Citation:
Envoyé par Zend
Pareil si je fais :Edit: Ah c'est bon, mon problème est résolu. J'ai regardé la doc pourCode:
1
2
3
4
5
6
7
8 $pass2 = $this->createElement('password', 'pass2'); $pass2->setLabel('Confirmer mot de passe') ->addFilter('StripTags') ->addFilter('StringTrim') ->setAllowEmpty(true) ->setRequired(true) ->autoInsertNotEmptyValidator(false); $pass2->addValidator('identical', true, array('token' => 'pass1'));
et je me suis aperçu que par défaut, ->setAllowEmpty est à true. J'ai donc testé ce qu'il faisait si je le mettais à false, et ça a marché ! Par contre, je dois enlever le setRequired et autoInsertNotEmptyValidator n'a pas l'air d'y changer grand chose, je l'ai donc viré.Code:
1
2 ->setAllowEmpty(true) ->autoInsertNotEmptyValidator(false)
Merci de votre aide ! :ccool:
C est le true du addValidator qui doit empecher le bon fonctionnement du code que je t ai donné.
Car avec false tout fonctionne comme tu voulais.
J'ai essayé avec false et ça ne marchait pas non plus. Mais bon, j'ai trouvé plus simple, il n'y a pas de problème avec la méthode que j'ai utilisé non ?
J'aimerais savoir, à quoi correspond le 2ème paramètre du addValidator, le booléen ?
Si tout fonctionne pour toi, reste comme ça, mais le comportement est tout de même bizarre, car avec ce que tu as mis tu ne devrais pas pouvoir laisser vide, je pense que c'est du à un enchaînement de validateurs, tu devrais peut être reprendre pas à pas.
J'ai dis plus haut que le deuxième paramètre correspond à casser ou non la chaîne de validation.
Aucune idée le code que tu as mis là c'est exactement ce que j'ai fait, mis à part les modifications que j'ai cité.
Mais tu entends quoi par "casser" ? Comme un explode() ?
Edit : J'ai trouvé le passage dans la doc qui confirme que mon code a un comportement normalCitation:
setAllowEmpty($flag) and getAllowEmpty() allow you to modify the behaviour of optional elements (i.e., elements where the required flag is FALSE). When the 'allow empty' flag is TRUE, empty values will not be passed to the validator chain.
Je sais très bien ce que fait setAllowEmpty, ne t'inquiète pas la dessus.
Ce que j'aimerai que tu explique (clairement) où le comportement de tout ce que tu as mis est normal.
Car là pour le moment, tu dis ça ça fait ça, si je le mets pas je ne sais pas si ça fonctionne. Tu es le seul a pouvoir nous dire le comportement exacte étant donné que tu es en situation réelle.
Nous avons pris la peine de détailler chaque point que nous avons indiqué, je souhaiterai que tu en fasse autant.
Merci
Ce que j'ai compris làC'est que s'il est passé à true, le validateur n'est pas pris en compte si le champ est vide, c'est le problème que j'avais, et que tu as dit plus haut.Citation:
When the 'allow empty' flag is TRUE, empty values will not be passed to the validator chain.
Sous entendu, s'il est passé à false, le validateur sera pris en compte même si le champ est vide. Je précise aussi que allow empty est par défaut à true.
Du coup, si je ne mets rien dans "pass2" et que je remplis "pass1", il va comparer la chaine, et comme les 2 champs n'ont pas la même valeur (un vide et un rempli) il passe par le validateur et me retourne l'erreur.