Bonjour
Je veux réaliser un truc assez classique : je propose à l'utilisateur du site de modifier son mot de passe, son adresse mail, son département, (...) via un formulaire.
S'agissant du mot de passe, j'ai 2 champs dans le formulaire : Nouveau et Confimation
Je veux que les champs soient valides dans les cas suivants :
-Cas 1 : Les deux champs sont vides (= cas ou l'utilisateur ne veut pas changer son mot de passe)
ou bien :
-Cas 2 : Les 2 champs sont non vides, avec une valeur identique pour les 2, ... et de format Alphanumerique+longueur entre 5 et 10 caractères... blablabla.
Comment peut on faire cela proprement avec des éléments de formulaire et des valideurs ?
J'ai déjà créé un valideur pour le champ Confirmation qui compare la valeur de ce champ a celle du champ Nouveau. A l'instanciation de ce valideur, je lui passe une référence au champ Nouveau pour accéder à la valeur de ce champ et la comparer valeur du champ Confirmation.
Par ailleurs, j'ai mis pour mes 2 champs le flag Required à false, pour autoriser qu'ils soient laissés vides (cas 1 de validation)
>>> Problème : Lorsque je saisis quelque chose dans Nouveau, et rien dans Confirmation. Il considère le formulaire comme valide, car dans ce cas comme le champ Confirmation est vide, il ne va pas continuer les tests pour vérifier si sa valeur est égale à la valeur du champ Nouveau !
Voici un bout de mon code :
Zend_Form :
Mon valideur de comparaison des 2 champs :
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 function init() { ... $psw = new Zend_Form_Element_Password('Nouveau'); $psw->setRequired(false) ->setLabel('Nouveau') ->addValidator(new Monvalideur_Formatpsw); ... $pswcValideur = new Monvalideur_PswConfirmationIdentique; $pswcValideur->attachePsw($psw); $pswc = new Zend_Form_Element_Password('Confirmation'); $pswc->setRequired(false) ->setLabel('Confirmation') ->addValidator(new Monvalideur_Formatpsw) ->addValidator($pswcValideur); ... $this->addElement($psw) ->addElement($pswc); ... }
Merci pour votre aide,
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 class Monvalideur_PswConfirmationIdentique extends Zend_Validate_Abstract { const MSG_NOT_EQUAL = 'msgNotEqual'; /** * @var Zend_Form_Element Mot de passe Initial avec lequel sera comparé * le mot de passe de confirmation */ protected $_pswObjet; /** * @var array Template des messages d'erreur retournés suite test de validation */ protected $_messageTemplates = array( self::MSG_NOT_EQUAL => 'Les deux mots de passe saisis doivent être identiques'); /** * Attache le mot de passe Initial dont la valeur est à comparer au mot de passe * de confirmation * * @param Zend_Form_Element Mot de passe initial */ public function AttachePsw($psw) { $this->_pswObjet = $psw; } /** * Valide la valeur du mot de passe de confirmation * Le cas échéant, détermine l'erreur * * @param mixed Valeur à valider * @return boolean TRUE si le mot de passe de confirmation est égale à la * valeur du mot de passe initial attaché. */ public function isValid($valeurPswConfirmation) { $this->_setValue($valeurPswConfirmation); if($valeurPswConfirmation != $this->_pswObjet->getValue()) { $this->_error(self::MSG_NOT_EQUAL); return false; } return true; } }
Partager