IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Ajout d'un Validator maison


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut Ajout d'un Validator maison
    Bonjour, je voudrais utiliser un validateur perso pour tester deux champs de type password d'un formulaire.
    Pour l'instant dans mon code j'ai ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $validators = array(
       'password' => array (new Zend_Validate_StringLength(6, 30)),
       'passwordConfirm' => array (new Zend_Validate_StringLength(6, 30))
    		);
    $input = new Zend_Filter_Input(null, $validators, $this->data);
    if (!$input->isValid()) {
       return $input->getMessages();
    }
    $this->data étant un tableau dans ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $this->data = array(
       'password' => $this->password,
       'passwordConfirm' => $this->passwordConfirm
    );
    C'est la façon de procéder qui est indiquée dans la partie sur les Zend_Filter_Input de la doc du framework.
    Et je n'arrive pas à ajouter un test supplémentaire pour vérifier que les deux champs sont égaux.
    Quelqu'un a deja fait ce genre de test ?

    Merci d'avance

  2. #2
    Membre chevronné Avatar de makmaoui
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 283
    Par défaut
    Salut,

    tu n'as pas besoin de Zend vu la simplicité du test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    if($_POST['pass'] == $_POST['passconfirm']) 
     
    ?>

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    D'accord. Alors on va dire que je voudrais faire le test, ça sera un exercice. Parce que là c'est pas dur de tester simplement, mais dans d'autres cas ça pourrait l'être.
    Et ce n'est pas dans l'esprit de la validation avec le framework.
    Il y a aussi le fait que je n'ai pas mis tout le code, et que je valide d'autres champs lors de cette étape. Alors autant tout faire de la même manière et en une seule étape.

    Voilà quelques raisons pour lesquelles je voudrais utiliser cette technique.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Par défaut
    Bonjour,

    D'aprèe la doc du zend framework sur le Zend_Input_Validate : dans ton validateur, tu peux définir une régle 'password' qui utilise un validateur StringEquals que tu aurais créé et qui s'appuie sur les champs password et passwordConfirm.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $validators = array(
        'password' => array(
            'StringEquals',
            'fields' => array('password', 'passwordConfirm')
        )
    );
    Cette règle aura pour conséquence de passer en paramètre du validateur StringEquals le tableau ayant pour valeur les champs 'password' et 'passwordConfirm'

    Et ton string Equals correspondrait à une classe du genre :
    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
     
     
    class My_Zend_Validate_StringEquals extends Zend_Validate_Abstract
    {
        const NOT_EQUALS = 'notEquals';
     
        protected $_messageTemplates = array(
            self::NOT_EQUALS => 'values are not equals ');
     
        public function isValid($value)
        {
        	if (!is_array($value))
        	{
        		return false;
        	}
     
             if (strcmp($value[0], $value[1]) != 0)
             {
                 $this->_error(self::NOT_EQUALS);
        	     return false;
        	 }
             else
                return true;
        }
    }
    J'ai pas testé, mais dans l'idée ça devrai être ça.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    En utilisant cette méthode isValid() :
    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
    public function isValid($value)
    	{
    		if (!is_array($value))
    		{
    			return false;
    		}
    		$fields = array();
    		foreach($value as $field) {
    			$fields[] = $field;
    		}
    		if (strcmp($fields[0], $fields[1]) != 0) {
    			$this->_error(self::NOT_EQUALS);
    			return false;
    		} else {
    			return true;
    		}
    	}
    La validation fonctionne bien.

    Il faut penser à ajouter le namespace adequat au Zend_Filter_Input utilisé.
    C'est à dire que ma classe se nomme MyValid_StringEquals, donc je dois ajouter le namespace MyValid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $input = new Zend_Filter_Input(null, $validators, $this->data);
    $input->addNamespace('MyValid');
    Et le fichier dans lequel est déclarée ma classe peut se nommer StringEquals.php et se trouver dans validators/MyValid/ , sachant que seul le repertoire validators est connu de l'include_path.

    Reste un point en suspend : comment inclure dans le message d'erreur les noms des deux champs concernés ?

    Mais on peut dire que le problème est résolu. Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Ajouter une durée à une date et obtenir une date valide
    Par bigltnt dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/06/2007, 14h55
  2. Validator maison et attribut required
    Par sir_gcc dans le forum JSF
    Réponses: 4
    Dernier message: 11/05/2007, 13h41
  3. [MySQL] Ajouter/Valider des articles
    Par toulousain3117 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 17/01/2007, 15h01
  4. [XHTML] Ajout d'un namespace personnalisé et validation
    Par siddh dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/01/2006, 00h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo