Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 30-04-2008 11:56:38

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

Problème de validation avec StringLength

Bonjour

J'essaie de vérifier la longueur du contenu d'un champ avec StringLength mais ça ne fonctionne pas.

Code:

$nb_adultes = new Zend_Form_Element_Text('nb_adultes');
$nb_adultes->addValidator('StringLength', true, array('min' => 1));
$nb_adultes->addValidator('Int');
$nb_adultes->setLabel('Nombre d\'adultes');

visiblement il ne tient pas compte du parmètre  min. En revanche, si je donne un paramètre max, il le respect (mais toujours pas le min)


Julien

Hors ligne

 

#2 30-04-2008 13:42:52

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Problème de validation avec StringLength

Je pense que tu devrais créer ton validator comme ceci :

Code:

$validator = new Zend_Validate_StringLength($min, $max);
$validator->setMessage("La chaîne '%value%' n'est pas au format attendue",  Zend_Validate_StringLength::NOT_TOO_SHORT);
$nb_adultes->addValidator($validator);

Ou sinon, essaie :

Code:

array('stringLength', false, array(6, 20))

Dernière modification par whitespirit (30-04-2008 14:45:18)

Hors ligne

 

#3 30-04-2008 14:17:17

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

Re: Problème de validation avec StringLength

Je crois que j'ai compris. La validation ne se fait pas si le champ est laissé vide. Il faudrait donc utiliser setRequired . Mais cela me pose un autre problème je veux que le contenu du champ soit un entier. Mais je veux aussi obliger l'utilisateur à entrer une valeur, même si celle-ci est 0. Or, en utilisant setRequired, 0 serait considéré comme non valide. Comment faire ?


Julien

Hors ligne

 

#4 30-04-2008 14:44:06

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Problème de validation avec StringLength

normalement, si tu fais :

Code:

$nb_adultes->addValidator($validator)
->addValidator('Digits', true, array('messages' => 'Le champs doit être composé uniquement de chiffre (sans espace).'))
->setRequired(true)

tu devrais t'en sortir

Dernière modification par whitespirit (30-04-2008 14:44:42)

Hors ligne

 

#5 30-04-2008 16:32:43

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

Re: Problème de validation avec StringLength

parfait, merci


Julien

Hors ligne

 

#6 31-05-2008 11:29:55

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

Re: Problème de validation avec StringLength

En fait non, il reste un petit problème : si mon champ contient 0, c'est considéré comme vide par le required. Comment faire pour que 0 soit valide ?


Julien

Hors ligne

 

#7 02-06-2008 11:28:59

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Problème de validation avec StringLength

Il faudrait utiliser le 'allowEmpty'=false je pense.

Hors ligne

 

#8 08-06-2008 01:29:29

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

Re: Problème de validation avec StringLength

non, justement pas. C'est tout le contraire de ce que je veux.
Voici mon but :

J'ai deux champs (nb_adultes et nb_enfants) qui doivent permettre à l'utilisateur d'indiquer un nombre de personnes.
Supposons qu'il indique 2 dans le champ nb_adulte et laisse le champ nb_enfant vide. Dans ce cas-là je n'ai aucun moyen de savoir si son intention était vraiment d'indiquer zéro enfant ou s'il a simplement oublier de remplir le champ.
C'est pourquoi je voudrais que les conditions suivante soit respectées :

- le champ ne peut être vide (d'où le setRequired)
- le champ ne peut contenir que des nombre entier (validateur Digits)
- mais que 0 soit considéré comme valide.

Y-a-t-il un moyen de faire cela ?


Julien

Hors ligne

 

#9 09-06-2008 08:59:04

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Problème de validation avec StringLength

Créer un validateur avec une expression régulière comme par exemple :

Code:

->addValidator(new Zend_Validate_Regex('/^[0-9]*/'),true, array('NOT_MATCH'=>'Erreur'))

Je te dis comme par exemple car j'écris rarement des expressions régulières et à chaque fois je dois réapprendre comment ça marche sad Si tu n'as pas d'idée, fait un tour sur le siteduzero.fr y'a un article bien fait (comme la plupart de leurs articles d'ailleurs) et assez simple à mettre en oeuvre.

Hors ligne

 

#10 09-06-2008 10:18:01

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Problème de validation avec StringLength

et si tu remplace tout ca par :

1 filter 'Digit'
1 validateur 'NotEmpty'


logiquement, le 0 devrait passer ?

Hors ligne

 

#11 09-06-2008 10:58:43

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

Re: Problème de validation avec StringLength

J'ai essayé. Le problème maintenant c'est que avec NotEmpty, la valeur 0 est considérée comme vide


Julien

Hors ligne

 

#12 09-06-2008 11:29:31

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Problème de validation avec StringLength

et si à la place du NotEmpty, tu met un stringLenght(1)


(arf, ca reviens à ce que tu faisais au début ... hmm )

Et si tu fait un GreaterThan(-1) à la place du notEmpty ?


La derniere solution reste à faire ton validateur perso, juste en comparant si la valeur est supérieure ou égale à  0 ...

Hors ligne

 

#13 09-06-2008 23:33:26

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

Re: Problème de validation avec StringLength

ça ne va pas. GreaterThan considère un champ vide comme 0 (donc correct).

Je pense que je vais faire mon propre validateur


Julien

Hors ligne

 

#14 10-06-2008 08:12:06

julz
Membre
Date d'inscription: 19-07-2007
Messages: 33

Re: Problème de validation avec StringLength

Bonjour,

étant donné que la validation porte sur un nombre, pourquoi ne pas utiliser le validateur between  ?

Hors ligne

 

#15 10-06-2008 09:29:38

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Problème de validation avec StringLength

Effectivement, ca te prendra 5min ^^

Hors ligne

 

#16 10-06-2008 09:48:31

JuTs
Membre
Date d'inscription: 07-03-2008
Messages: 63

Re: Problème de validation avec StringLength

julz a écrit:

Bonjour,

étant donné que la validation porte sur un nombre, pourquoi ne pas utiliser le validateur between  ?

Parce qu'avec tous ces validateurs une chaîne vide == 0, et est donc considérée comme correcte. Alors que je veux que l'utilisateur entre la valeur 0 dans ces cas-là et ne laisse pas le champ vide. Et l'ajout d'un required ou quelque chose comme ça ne change rien puisque pour eux c'est 0 qui est considéré comme vide.


stf a écrit:

Effectivement, ca te prendra 5min ^^

J'ai donc fait ceci :

Code:

class MZ_Validate_Int extends Zend_Validate_Int {
    
    const NOT_INT = 'notInt';
    const IS_EMPTY = 'isEmpty';

    protected $_messageTemplates = array(
        self::NOT_INT => "'%value%' does not appear to be an integer",
        self::IS_EMPTY => "Value is empty, but a non-empty value is required"
    );
    
    public function isValid($value) {
        
        if(strlen(trim($value)) == 0) {
            $this->_error(MZ_Validate_Int::IS_EMPTY);
            return false;
        }
        
        return parent::isValid($value);
    }
}

Julien

Hors ligne

 

#17 10-06-2008 10:53:27

julz
Membre
Date d'inscription: 19-07-2007
Messages: 33

Re: Problème de validation avec StringLength

En effet, dans ce cas essaie cela

Code:

$nb_adultes = new Zend_Form_Element_Text('nb_adultes');
$nb_adultes->addValidator('Between', true, array('min'=>0, 'max'=> 100, true))
        ->addFilter('Int');

- le 3eme parametre indique que 0 et 100 sont compris
- filter int type la valeur en entier pour accepter la comparaison

Hors ligne

 

#18 10-06-2008 11:03:53

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: Problème de validation avec StringLength

Sinon, le test $var === 0 n'acceptera que 0, et pas "null"
Peut-être même $var === '0' ?
Au pire utilise un to_string....

Je balance des idées comme ça, j'ai rien testé !

Dernière modification par Bast (10-06-2008 11:04:46)

Hors ligne

 

#19 10-06-2008 11:09:14

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Problème de validation avec StringLength

le but c'était de le faire avec un validateur je crois big_smile

Hors ligne

 

#20 10-06-2008 11:11:50

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: Problème de validation avec StringLength

Rien n'empêche de le créer par extension smile

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