12
votes

Comment vérifier le champ de mot de passe dans le formulaire ZEND?

Dans ma forme, j'essaie de vérifier que l'utilisateur remplit la même valeur des deux fois (pour vous assurer qu'ils ne font pas une erreur). Je pense que c'est ce que zend_validate_identique code> est pour, mais je ne suis pas tout à fait sûr comment l'utiliser. Voici ce que j'ai jusqu'à présent:

$this->addElement('password', 'password', array(
        'label'      => 'Password:',
        'required'   => true,
        'validators' => array(
            'Identical' => array(What do I put here?)
        )
    ));
$this->addElement('password', 'verifypassword', array(
        'label'      => 'Verify Password:',
        'required'   => true,
        'validators' => array(
            'Identical' => array(What do I put here?)
        )
    ));


1 commentaires

Réponse à jour en utilisant zend_validate_entical et un autre élément en tant que "jeton": Stackoverflow.com/questions/1628606/...


7 Réponses :


1
votes
class My_Validate_PasswordConfirmation extends Zend_Validate_Abstract
{
const NOT_MATCH = 'notMatch';

protected $_messageTemplates = array(
    self::NOT_MATCH => 'Password confirmation does not match'
);

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;
}
}
http://framework.zend.com/manual/en/zend.form.elements.html

0 commentaires

5
votes

Je ne peux pas le tester pour le moment, mais je pense que cela pourrait fonctionner:

$this->addElement('password', 'password', array(
    'label'      => 'Password:',
    'required'   => true
));
$this->addElement('password', 'verifypassword', array(
    'label'      => 'Verify Password:',
    'required'   => true,
    'validators' => array(
        array('identical', true, array('password'))
    )
));


2 commentaires

Je reçois l'erreur: le jeton 'Mot de passe' ne correspond pas au jeton donné 'TestPassword'. TestPassword est la valeur et le mot de passe sont le nom de l'élément spécifié ici: "identique", true, tableau ("mot de passe")


J'étais sur le point de dire que c'était étrange qu'il affichait la valeur du mot de passe que j'ai saisi dans le message d'erreur, mais s'avère que ce n'est pas vrai car j'avais défini le type d'élément comme texte et non de mot de passe.



0
votes

J'ai pu le faire fonctionner avec le code suivant:

dans mon formulaire I Ajouter le validateur identique sur le second élément uniquement: p>

$validator = $form->getElement('verify_email')->getValidator('identical');
$validator->setToken($this->_request->getPost('email'));


0 commentaires

1
votes
$token = Zend_Controller_Front::getInstance()->getRequest()->getPost('password');
$confirmPassword->addValidator(new Zend_Validate_Identical(trim($token)))
                  ->addFilter(new Zend_Filter_StringTrim())
                  ->isRequired();   
Use the above code inside the class which extends zend_form.

2 commentaires

ne pouvons-nous pas utiliser $ mot de passe-> getvalue ()? Eh bien, j'ai déjà essayé mais j'ai eu la valeur vide .. Pourquoi est-ce tellement? Si GetValue est la méthode de cet élément, il aurait dû renvoyer la valeur du mot de passe?


que parce que getvalue () est appelé avant $ forme-> isvalid ($ _ post); Puisque ce code est à l'intérieur du constructeur ou de la méthode init.



2
votes

Après deux jours, j'ai trouvé la bonne réponse Suivez-moi étape par étape:

Étape 1: strong> p>

Créer PasswordConfirmation.php code> fichier Répertoire racine de votre projet avec ce chemin: YourProject / My / Validate / PasswordConfirmation.php Code> Avec ce contenu ci-dessous: P>

//create the form elements user_password
$userPassword = $this->createElement('password', 'user_password');
$userPassword->setLabel('Password: ');
$userPassword->setRequired('true');
$this->addElement($userPassword);

//create the form elements user_password repeat
$userPasswordRepeat = $this->createElement('password', 'user_password_confirm');
$userPasswordRepeat->setLabel('Password repeat: ');
$userPasswordRepeat->setRequired('true');
$userPasswordRepeat->addPrefixPath('My_Validate', 'My/Validate', 'validate');
$userPasswordRepeat->addValidator('PasswordConfirmation', true, array('user_password'));
$this->addElement($userPasswordRepeat);


1 commentaires

@MOINSAM, si j'ai une option d'édition / mise à jour avec Ajoutez les changements nécessaires?



0
votes

avec Zend Framework 1.10 strong> Le code nécessaire pour valider l'égalité de deux champs à l'aide de ZEND FORMULAIRE STRAND> et ZEND VALIDATEZ STRY> est:

    $form->addElement('PasswordTextBox',
                      'password',
                      array('label'      => 'Password')
                      );

    $form->addElement('PasswordTextBox',
                      'password_confirm',
                      array('label'      => 'Confirm password',
                            'validators' => array(array('Identical', false, 'password')),
                            )
                      );


0 commentaires

28
votes

Pour ce que sa valeur, la prise en charge de la comparaison de deux champs de forme identiques dans un modèle a été ajouté à la version 1.10.5. J'ai écrit un court tutoriel sur la matière, que vous pouvez accéder via le lien ci-dessous, mais le résultat final est que le validateur Zend_Validate_Idité a été refacturé pour accepter un nom de champ de formulaire comme entrée. Par exemple, pour comparer les valeurs des champs de formulaire PSWD et Confirm_PSWD, vous attachez le validateur à confirmer_pswd comme: xxx

fonctionne comme un charme.

Voir < un href = "http://www.wjgilmore.com/blog/entry/validatindatinding_ididing_passwords_with_the_zend_framework" rel = "Noreferrer"> Validation de mots de passe identiques avec le cadre Zend pour un exemple plus complet.


2 commentaires

Comment puis-je utiliser ceci pour ajouter et modifier l'opération @ Jason, @ Saji89


Vous sauvez ma journée. Merci beaucoup !