Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2007, 23h36   #1
Membre actif
 
Inscription : 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
Points : 187
Points : 187
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 :
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 :
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
sir_gcc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2007, 23h47   #2
Membre éclairé
 
Avatar de makmaoui
 
Développeur Web
Inscription : mai 2007
Messages : 282
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2007
Messages : 282
Points : 361
Points : 361
Salut,

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

Code :
1
2
3
4
5
 
<?php
if($_POST['pass'] == $_POST['passconfirm']) 
 
?>
makmaoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2007, 01h03   #3
Membre actif
 
Inscription : 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
Points : 187
Points : 187
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.
sir_gcc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2007, 03h12   #4
Membre confirmé
 
Inscription : juin 2005
Messages : 171
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juin 2005
Messages : 171
Points : 214
Points : 214
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 :
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 :
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.
aurelman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2007, 11h51   #5
Membre actif
 
Inscription : 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
Points : 187
Points : 187
En utilisant cette méthode isValid() :
Code :
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 :
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.
sir_gcc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h59.


 
 
 
 
Partenaires

Hébergement Web