Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-08-2008 06:35:15

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

[Zend_Form] Mot de passe et mot de passe bis

Bonjour,

Pour réaliser l'enregistrement d'un usager je demande comme toujours un mot de passe ainsi qu'une confirmation. Je voudrai creer un validateur qui vérifierai l'égalité des 2 mots de passes. Pour créer le formulaire j'utilise une classe etendue de Zend_Form où je crée l'élément mot de passe

Code:

 $password = new Zend_Form_Element_Password('password');
        $password->setLabel('Mot de passe')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');

Je veux maintenant récupérer la valeur stockée dans le champ mot de passe pour pouvoir l'utiliser directement dans l'élément suivant en créant d'abord une instance de mon validateur qui vérifiera l'égalité entre mot de passe et mot de passe bis. Le problème c'est que je n'y arrive pas j'ai essayé de faire $this->getValue('password') mais ce n'est pas ça apparement. Il doit bien exister un moyen je pense. Je vous met le code complet de la classe pour mieux m'expliquer.

Code:

<?php

class AccountForm extends Zend_Form
{
    public function __construct($options = null)
    {
        parent::__construct($options);
        $this->setName('account');

        $username = new Zend_Form_Element_Text('username');
        $username->setLabel('Nom d\'utilisateur')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');

        

        $password = new Zend_Form_Element_Password('password');
        $password->setLabel('Mot de passe')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');

        $same_password_validator = new ValidSamePassword($this->getValue('password'));        

        $password_bis = new Zend_Form_Element_Password('password_bis');
        $password_bis->setLabel('Retapez le mot de passe')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty')
        ->addValidator($same_password_validator);
        

        $mailValidator = new Zend_Validate_EmailAddress();
    $mailValidator->setMessages( array(
    Zend_Validate_EmailAddress::INVALID => 'Adresse mail invalide',
    Zend_Validate_EmailAddress::INVALID_HOSTNAME  => 'Adresse mail invalide',
    Zend_Validate_EmailAddress::INVALID_MX_RECORD  => 'Adresse mail invalide',
    Zend_Validate_EmailAddress::DOT_ATOM  => 'Adresse mail invalide',
    Zend_Validate_EmailAddress::QUOTED_STRING  => 'Adresse mail invalide',
    Zend_Validate_EmailAddress::INVALID_LOCAL_PART  => 'Adresse mail invalide',
));


        $mail = new Zend_Form_Element_Text('mail');
        $mail->setLabel('Adresse mail')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty')
        ->addValidator($mailValidator);
        
        $id = new Zend_Form_Element_Hidden('id');
        
        $submit = new Zend_Form_Element_Submit('Valider');
        $submit->setAttrib('id', 'submitbutton');
        
        $this->addElements(array($id, $username, $password, $password_bis, $mail, $submit));


    }
}

Voilà j'éspère avoir été clair, merci pour vos réponses wink


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#2 04-08-2008 14:07:29

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Re: [Zend_Form] Mot de passe et mot de passe bis

Y'a vraiment aucune solution à ça ou ma question est simplement trop evidente pour s'attarder dessus? car là je ne vois vraiment pas alors même si c'est simple ça me bloque vraiment dans mon codage, un petit coup de main s'il vous plait wink


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#3 04-08-2008 15:08:20

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Zend_Form] Mot de passe et mot de passe bis

Salut,

Wow, à peine 8 heures entre ta demande et ton up!!!
Petite précision, on est en plein milieu des vacances et beaucoup y sont à mon avis donc très loin du PC.

Bon, revenons à nos moutons.
As tu essayé de mettre à la place de :

Code:

$same_password_validator = new ValidSamePassword($this->getValue('password'));

ceci:

Code:

$same_password_validator = new ValidSamePassword($password);

ou ceci:

Code:

$same_password_validator = new ValidSamePassword('password');

Si oui et que ça n'a rien donné, pourrais-tu afficher le code de ta classe?

A+

Hors ligne

 

#4 04-08-2008 16:22:26

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Re: [Zend_Form] Mot de passe et mot de passe bis

Merci pour ta réponse,

Lorsque je met $password ça retourne le label et le champ du formulaire, et lorsque que je met 'password' ça retourne 'password' forcement wink


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#5 04-08-2008 16:28:49

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Zend_Form] Mot de passe et mot de passe bis

Salut,

Peux-tu fournir le code que tu as mis dans ta classe 'ValidSamePassword()', s'il te plait?

J'ai une solution qui pourrait te convenir sans avoir recours à une classe Validate custom

Code:

$password_bis->addValidator(
    'Identical',
    false,
    'password'
);

Dernière modification par -=blu3+3y3s=- (04-08-2008 16:39:08)

Hors ligne

 

#6 04-08-2008 16:52:21

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Re: [Zend_Form] Mot de passe et mot de passe bis

Salut,

Oui voilà le code:

Code:

<?php
require_once 'Zend/Validate/Abstract.php';

class ValidSamePassword extends Zend_Validate_Abstract
{
    /**#@+
     * Error codes
     * @const string
     */
    const NOT_SAME      = 'notSame';
    
    
    protected $_messageTemplates = array(
        self::NOT_SAME      => 'Le mot de passe est different du mot de passe bis',
     
    );

    /**
     * Original token against which to validate
     * @var string
     */
    protected $_password;
    
    /**
     * Sets validator options
     *
     * @param  string $token
     * @return void
     */
    public function __construct($password)
    {
     $this->_password = $password;
     
    }
    
    public function isValid($value)
    {    exit($this->_password);
        $this->_setValue($value);
        
        if ($this->_password != $this->_password_bis)  {
            $this->_error(self::NOT_SAME);
            return false;
        }

        return true;
    }
}

Je vais tester ta solution merci


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#7 04-08-2008 17:00:45

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Re: [Zend_Form] Mot de passe et mot de passe bis

J'ai remplacé mon code par le suivant:

Code:

$password_bis = new Zend_Form_Element_Password('password_bis');
        $password_bis->setLabel('Retapez le mot de passe')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');
        ->addValidator('Identical',false,'password');

Ca me génère l'erreur suivante:

Fatal error: Cannot unset string offsets in /Applications/MAMP/htdocs/guitar-gathering/library/Zend/Form/Element.php on line 991

ça a l'air pas mal ton idée mais ça ne fonctionne pas pour le moment, de plus j'aimerai personnaliser le message donc je pensais plutot faire un new Zend_Validate_Identical('password') mais le problème c'est que de cette manière le validateur va comparer ma valeur avec la chaine 'password' et non pas avec son contenu!


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#8 04-08-2008 21:34:20

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Zend_Form] Mot de passe et mot de passe bis

Salut,

Désolé, j'ai oublié que le 3ème paramêtre devait être un tableau.

Donc ton code doit être celui-ci

Code:

$password_bis = new Zend_Form_Element_Password('password_bis');
        $password_bis->setLabel('Retapez le mot de passe')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty')
        ->addValidator('Identical', false, array('password'));

Normalement, tu ne devrais pas avoir d'erreur.

A+

Dernière modification par -=blu3+3y3s=- (04-08-2008 21:38:19)

Hors ligne

 

#9 04-08-2008 23:01:34

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Re: [Zend_Form] Mot de passe et mot de passe bis

Merci je vais essayer!


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#10 05-08-2008 00:49:13

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Re: [Zend_Form] Mot de passe et mot de passe bis

Bon en fait ça ne resoud pas mon problème car ça recupere toujours une chaine 'password' et non pas la valeur de password, pourtant je suis certain que ça doit etre facile à faire mais par quoi! J'ai vu sur certains forums qu'on parlait de getParam alors j'ai essayé:

Code:

        $password_bis = new Zend_Form_Element_Password('password_bis');
        $password_bis->setLabel('Retapez le mot de passe')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty')
        ->addValidator('Identical', false , $this->getParam('password'));

mais rien n'y fait ça ne marche pas, mais vous faites comment vous pour vérifier qu'un mot de passe est identique au second? wink


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#11 05-08-2008 10:02:35

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Zend_Form] Mot de passe et mot de passe bis

Salut,

Je ne l'ai pas testé donc je suppose selon le code de la fonction.
Essaye ça:

Code:

...
->addValidator('Identical', false, array($this->getValue('password'));

A+

Hors ligne

 

#12 07-08-2008 11:18:06

BojaKo
Nouveau membre
Date d'inscription: 07-08-2008
Messages: 2

Re: [Zend_Form] Mot de passe et mot de passe bis

Bonjour,

J'ai eu le même problème, que je viens de résoudre en lisant la doc. Dans ton validateur de mot de passe, utilise en deuxième argument une variable $context nulle par défaut, qui est un tableau possédant l'ensemble des valeurs données dans le formulaire :

Code:

public function isValid($value, $context = null)
    {
        $value = (string) $value;
        $this->_setValue($value);

        if (is_array($context)) {
            if (isset($context['password_confirm'])
                && ($value == $context['password_confirm']))
            {
                return true;
            }
        } elseif (is_string($context) && ($value == $context)) {
            return true;
        }

        $this->_error(self::NOT_MATCH);
        return false;
    }

A+

Hors ligne

 

#13 12-09-2008 10:44:49

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: [Zend_Form] Mot de passe et mot de passe bis

Bonjour,

vu que ce post n'est pas résolu. J'ai trouvé une réponse à cette adresse (http://www.zfforums.com/zend-framework- … g-706.html) qui est très simple :

Code:

$password_confirm       = new Zend_Form_Element_Password('password_confirm');
$password_confirm->setLabel('Confirmez le mot de passe ')
            ->setRequired(true)
            ->addValidator(new Zend_Validate_Identical($_POST['password']));

Dans cette solution, il suffit simplement de passer en paramètre au validateur du champ "mot de passe à confirmer" la valeur du champ saisie dans le champ 'mot de passe'.

A+

Hors ligne

 

#14 12-09-2011 15:46:02

nk34
Membre
Date d'inscription: 10-08-2011
Messages: 32

Re: [Zend_Form] Mot de passe et mot de passe bis

Je remonte le sujet,
Dans la version actuelle, on peut faire référence à un champ par une chaine, y compris dans une class étendant Zend_Form :

...
->addValidator(new Zend_Validate_Identical('password'));

'password' faisant référence à : 
new Zend_Form_Element_Password('password');

Regards

Dernière modification par nk34 (12-09-2011 15:46:19)

Hors ligne

 

#15 12-11-2012 22:42:53

NicoC
Membre
Date d'inscription: 03-11-2012
Messages: 13

Re: [Zend_Form] Mot de passe et mot de passe bis

A mon tour de remonter ce sujet.
Personne aurait un code qui fonctionne ?

Cà fait 2 heures que je tourne en rond.
J'ai dû essayer plein de sources différentes, et à chaque fois, rien ne fonctionne...

Code:

$emailIdentical = new Zend_Validate_Identical();
$emailIdentical->setToken('email1')
               ->setMessage('form_createUser_validator_email_identical');

$email1 = $this->addElement(new Zend_Form_Element_Text('email1'))->getElement('email1')
              ->setLabel('email1');
        
$email2 = $this->addElement(new Zend_Form_Element_Text('email2'))->getElement('email2')
              ->setLabel('email2')
                  ->addValidator('Identical', true, array($this->getValue('email1'), 'test test'))
                 //->addValidator($emailIdentical)
           ;

// dernier code testé
$email2 = $this->addElement('text', 'email2', array(
                   'label' => 'email2',
                'validators' => array(
                           array('identical', false, array('token' => 'email1'))
                   )
           ));

Voici le code que j'utilise actuellement.
A votre bon coeur smile

Merci d'avance.

Dernière modification par NicoC (12-11-2012 22:48:13)

Hors ligne

 

#16 03-04-2013 07:46:57

zfemogne
Nouveau membre
Date d'inscription: 03-04-2013
Messages: 3

Re: [Zend_Form] Mot de passe et mot de passe bis

Dans ton validateur de mot de passe, utilise en deuxième argument.




________________________________
diablo 3 gold,d3 gold

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