Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-03-2008 08:20:17

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

Zend_Form et Validator de Date

Bonjour, voici mon élément date :

Code:

       $date_creation->setLabel('Date de création')
                      ->setRequired(true)
                      ->addValidator('NotEmpty',true, array('messages' => 'La date de création ne doit pas être vide'))
                      ->addValidator('Date', true, array('messages' => 'La date doit être au format dd/mm/aaaa'));

Le hic, est que même si ma date est dd/mm/aaaa j'ai une erreur. Dans /library/zend/validate/ j'ai bien mon validator Date contenant cette fonction :  public function setFormat($format = null) mais je ne vois pas comment l'utiliser ici.

Si vous avez une idée, je suis preneur.

Merci

Hors ligne

 

#2 27-03-2008 09:30:42

Nikkau
Membre
Date d'inscription: 25-03-2008
Messages: 52

Re: Zend_Form et Validator de Date

<?php
$element->addValidators(array(
    array(
        'validator' => 'NotEmpty',
        'messages' => 'La date de création ne doit pas être vide'),
    array(
        'validator' => 'stringLength',
        'options'   => array(DD/MM/YYYY),
        'messages' => 'La date doit être au format dd/mm/aaaa')
));
?>

J'ai pas tester mais ça doit être un truc comme ça d'après ce que j'ai compris de la doc, y a peut être des corrections à faire mais la base est là.

Hors ligne

 

#3 27-03-2008 10:04:18

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Zend_Form et Validator de Date

Moi j'ai un bout de code comme ça:

Code:

$configForm = array(
            'id' => 'create_account',
            'action'   => 'ads/edit',
            'method'   => 'post',
            'class' => 'checkAdr',
            'elements' => array(
//...
                'date_available' => array('text', array(
                    'label' => $this->tl->_('ads.date_available'),
                    'validators' => array(new Zend_Validate_Date(null,Zend_Registry::get('locale')))
                )),
//...

Tu peux remplacer null par le format.
J'espère ça ira smile

Hors ligne

 

#4 27-03-2008 10:49:48

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

Re: Zend_Form et Validator de Date

Ben non, ça ne marche pas, pourtant l'idée est bonne...
J'ai ce validateur :       ->addValidator(new Zend_Validate_Date('DD/MM/YYYY'), true, array('messages' => 'La date doit être au format dd/mm/aaaa'));

A croire la doc se trouvant ici : http://framework.zend.com/manual/fr/zen … ants.html, c'est le bon format.

Alors si je met une date = "dfqsdf", le message d'erreur est en anglais. Si je met la date "11/03/2020qq" ou "11/03/20", pour zf c'est ok, ma date est bien au format exigé.

En tout cas, créer un validator à la volée n'a pas posé de problème.

Hors ligne

 

#5 27-03-2008 11:07:00

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Zend_Form et Validator de Date

Pour moi, actuellement, le seul moyen de traduire les messages c'est avec un adaptateur de traduction.

Hors ligne

 

#6 27-03-2008 11:16:16

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

Re: Zend_Form et Validator de Date

A la limite, pour la traduction je modifie directement le message dans la classe Date, mais le hic c'est que le format de date n'est pas vraiment respecté. Si je mets "11/03/2020dsfqdfqsdfqsdfjazrlh", ça passe, c'est une date valide !

Hors ligne

 

#7 07-04-2008 17:34:23

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

Re: Zend_Form et Validator de Date

J'ai exactement le même problème. Il suffit d'avoir une chaîne contenant une suite de chiffre pouvant former une date pour qu'elle soit considéré comme valide.

Par exemple, dans mon cas, la chaîne adsf10]sdf1ghgj1asdf08 (10-11-08) est considérée comme valide. Je me demande si la fonction de validation ne fait pas un filtre de façon à ne garder que les caractères numériques


EDIT : et comment valider une heure ? j'ai essayé de passer le format 'HH:mm' mais ça ne fonctionne pas, 25:65 est considéré comme correct.

Dernière modification par JuTs (07-04-2008 17:39:05)


Julien

Hors ligne

 

#8 07-04-2008 17:58:08

Nikkau
Membre
Date d'inscription: 25-03-2008
Messages: 52

Re: Zend_Form et Validator de Date

Pour la date, suffit de chain avec un validator sur la longueur non?

Pour l'heure, à part une regexp perso j'ai pas d'idée là tout de suite.

Hors ligne

 

#9 07-04-2008 18:12:09

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

Re: Zend_Form et Validator de Date

ouais, pourquoi pas ? Mais j'aurais espéré que le validateur de date sache valider une chaîne entrée par un utilisateur correctement.

Et puis ça ne marcherais pas dans tous les cas. Disons qu'on accepte uniquement une longueur de 10 (DD-MM-YYYY). donc en indiquant 10-11-2008 ça serait correcte mais pas 10-11-08. Alors que ça l'est pour le validateur de zend.

Je crois que je vais aller voir le code des classes concernées pour voir comment ça fonctionne.


Julien

Hors ligne

 

#10 07-04-2008 19:04:26

Nikkau
Membre
Date d'inscription: 25-03-2008
Messages: 52

Re: Zend_Form et Validator de Date

Reste la solution de la regexp velue qui prend tous les cas que tu veut et seulement les cas que tu veut smile .

Mais bon ça remet vachement en cause l'intérêt d'avoir un validator spé date, il marche avec les dates US au moins?

Hors ligne

 

#11 08-04-2008 01:31:03

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

Re: Zend_Form et Validator de Date

La validation des dates au format YYYY-MM-DD fonctionne. Mais la classe de validation utilise un expression régulière dans ce cas-là.

Dans les cas où un format de date est fourni, elle utilise la classe Zend_date qui, elle, utilise la classe Zend_Locale_Date qui va parser la chaîne. Les différentes parties numériques sont tout d'abord récupérées dans un tableau. par exemple, la chaîne sdfd10sdfsdf1sdfsdf1sdfsd06 sera divisée en :

10
1
1
06

La fonction tentera alors de les mettre en correspondance avec le format donné. Ainsi, avec le format DD-MM-YYYY, la date retournée sera 10-1-1.
Voilà pourquoi ce genre de chaîne est considéré comme correcte.

Donc, le seul moyen de vérifier à coup sur une date est d'utiliser une expression régulière.


Julien

Hors ligne

 

#12 08-04-2008 07:09:28

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

Re: Zend_Form et Validator de Date

Je n'ai pas l'habitude d'utiliser les expression régulière, pouvez-vous m'indiquer ou et comment l'utiliser ?

Hors ligne

 

#13 08-04-2008 10:47:29

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

Re: Zend_Form et Validator de Date

Un très bon site à ce sujet : http://www.expreg.com/


Julien

Hors ligne

 

#14 10-04-2008 00:32:08

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

Re: Zend_Form et Validator de Date

Exemple :

$date->addValidator('regex', true, array('/^\d{2}\D\d{2}\D\d{4}$/'));

explication sur l'expression :

^       : signale le début d'une chaîne
\d{2} : deux caractères de type décimal (équivalent à [0-9]{2}
\D      : un caractère non décimal (- / . ... bref, ce que l'on veux), équivalent à [^0-9]
$        : signale la fin de la chaîne.


Important : cette expression ne vérifie pas la validité d'une date, elle vérifie uniquement son format. Ainsi, 32/13/2008 serait considéré comme valide. Il convient donc de vérifier la validité de la date avec Zend_Validate_Date :
       
$date_deb->addValidator(new Zend_Validate_Date('DD/MM/YYYY'));

Je pense qu'il serait possible de vérifier la validité de la date à l'aide d'une seule expression mais mes compétence ne vont pas aussi loin.


Julien

Hors ligne

 

#15 06-01-2010 14:57:17

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: Zend_Form et Validator de Date

Hello, ça fait un moment déjà mais bon je viens de me faire un petit validateur.
Nommez le fichier DateFr.php et placez le dans 'library/Zend/Validate/'

Code:

<?php

// Vérifie que la date soit valide (Format:12/12/2010)

require_once 'Zend/Validate/Abstract.php';
class Zend_Validate_DateFr extends Zend_Validate_Abstract
{
    const E_DATE = 'msg_veuillez_saisir_date_valide';
 
    protected $_messageTemplates = array(
        self::E_DATE => 'msg_veuillez_saisir_date_valide'
    );
 
    public function isValid($value)
    {
        $this->_setValue($value);
        $reg = '`^(((0[1-9])|(1\d)|(2\d)|(3[0-1]))\/((0[1-9])|(1[0-2]))\/(\d{4})(((([[:space:]]?)(([0-1][0-9])|([2][0-3]))(:[0-5][0-9]))((:[0-5][0-9])?))?))$`';
        if(preg_match($reg,$value)){
            return true;
        }else{
            $translate = Zend_Registry::get('Zend_Translate');
            $this->_error($translate->_.'msg_veuillez_saisir_date_valide');
            return false;
        }
    }
}

Et si jamais 2 liens avec plein d'expression déjà construites smile
http://www.expreg.com/lire-Date-source
http://www.felgall.com/php17.htm

Dernière modification par m1b (06-01-2010 14:59:01)

Hors ligne

 

#16 06-01-2010 15:06:52

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: Zend_Form et Validator de Date

Euh, ça c'est pas top de mettre tes validateurs dans le dossier Zend ...

Crée toi un autre dossier au même niveau que Zend et charge le au lancement de l'application. (cf application.ini ou Bootstrap)

Hors ligne

 

#17 30-09-2010 17:57:59

sevy
Membre
Date d'inscription: 17-09-2010
Messages: 37

Re: Zend_Form et Validator de Date

slt à tous! m1b comment tu l'appelles stp?sur un champ zend_form_element_text?

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