Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-06-2010 13:10:13

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Utilisation des validateurs de formulaire ailleurs que dans un formula

Bonjour,

J’importe des données en provenance d’un fichier excel, le but est de les mettre la base de donnée.

Sachant que je dispose d’un formulaire avec les validateurs par défaut de Zend_Form, je trouve intéressant de les utiliser au lieu d’écrire des fonctions de validation de date, de mail, de chaine de caractères, etc …
Savez-vous comment procéder ?

Hors ligne

 

#2 18-06-2010 13:38:39

thbenda
Membre
Date d'inscription: 07-06-2010
Messages: 12

Re: Utilisation des validateurs de formulaire ailleurs que dans un formula

Bonjour,

Il y a quelques blogs pas mal sur la validation de formulaire:
custom validators 2008
conditionnal validation
Et puis il y a la documentation officielle!
zend form


Par ailleurs, la possibilité de filtrer les données existe si tu es en PHP 5 (cf. filter_var() et quantité de filtres existants).

Dernière modification par thbenda (18-06-2010 13:45:27)


Prendre le temps de faire les choses dans les temps. Sans doute pour avoir plus de temps pour faire d'autres choses dans les temps. Ne pas perdre de temps: facile à dire, facile à faire: de l'organisation et de la méthode!

Hors ligne

 

#3 18-06-2010 14:51:20

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Utilisation des validateurs de formulaire ailleurs que dans un formula

attention Zend_Validate est indépendant de Zend_Form et peut fonctionné seul.


----
Gruiiik !

Hors ligne

 

#4 21-06-2010 13:17:45

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: Utilisation des validateurs de formulaire ailleurs que dans un formula

Dans mon esprit Zend_Validate fesait partie de Zend_Form ....

J'ai une question par rapport à la façon dont je dois mettre ca en place.

J'ai une classe ImportExcel qui importe des données en lisant un fichier excel, tout est fait dans une méthode.

Une fois les données dans une variable, je l'envoie à une autre méthode de la classe qui va valider ou non les données une à une.

N'ai t il pas plus judicieux d'utiliser un helper ? (un action helper peut être ?)
En faite je ne sais pas si c’est bien de mettre l’extraction et la validation dans la même classe.

Hors ligne

 

#5 21-06-2010 17:00:42

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: Utilisation des validateurs de formulaire ailleurs que dans un formula

j'ai un soucis, j'ai fais une classe de validation, et je veux accéder au message d'erreur :

Code:

<?php
class model_Validation extends Zend_Validate_Abstract 
{

    
    public $_messages = array();

    public function getMessages()
    {
        return $this->_messages;
    }    
    

     public function isValid($value) {
        $valid = true;

        $price = $value['price'];       
        
        if (empty($price)) {
            $_messages[] = "price is empty";
            $valid = false;
      }
      


//     marche très bien
//        if (!empty($_messages))Zend_Debug::dump($_messages);
                
        
        return $valid;        
    }
    
}

la ligne commenté fonctionne,


mais de l'extérieur :

Code:

$val = new Model_Import();

$r = $val->isValid($row);

Zend_Debug::dump($val->getMessages());

et ça donne :

array(0) {
}


Vous savez pourquoi le tableau $_messages ce vide ?

Hors ligne

 

#6 22-06-2010 09:09:08

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Utilisation des validateurs de formulaire ailleurs que dans un formula

Salut,

Il manque un "$this", $this->_message[] plutôt que $_message[].

Sinon c'est pas vraiment de cette manière qu'est pensé Zend_Validate pour les messages d'erreur. Si tu veux pouvoir utiliser des templates et des clés pour la traduction, il faudrait plutôt faire un truc du genre :

Code:

<?php
class model_Validation extends Zend_Validate_Abstract 
{

    /**
     * Error constants
     */ 
    const ERROR_PRICE_EMPTY = 'priceEmpty';  
   
    /**
     * @var array Message templates
     */    
    protected $_messageTemplates = array(
        self::ERROR_PRICE_EMPTY => 'Price can't be empty'
    );
    

     public function isValid($value) {
        $valid = true;

        $price = $value['price'];       
        
        if (empty($price)) {
            $this->_error(self::ERROR_PRICE_EMPTY);
            $valid = false;
      }
      


//     marche très bien
//        if (!empty($_messages))Zend_Debug::dump($_messages);
                
        
        return $valid;        
    }
    
}

A+ benjamin.

Dernière modification par Delprog (22-06-2010 09:09:52)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#7 22-06-2010 09:33:37

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: Utilisation des validateurs de formulaire ailleurs que dans un formula

merci beaucoup Delprog ! tu me sauve !!

Hors ligne

 

#8 22-06-2010 14:11:35

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: Utilisation des validateurs de formulaire ailleurs que dans un formula

Me revoilà.

J'ai fais exactement comme ton exemple. Mais j'ai un souci.


Lorsque je fais un :

Code:

$val = new Model_Validation();
$val->isValid($row);
print_r($val->getMessages());  //ici

j'ai systématiquement TOUS les messages d'erreurs, alors que le teste isValid() est passé avec succès!
EDIT : précision : c'est utilisé dans une boucle je teste pleins de valeurs, si je fais un seul teste c'est ok,
sinon les erreur restent dans l'attributs de l'objet

Code:

class Model_ExcelImportValidationItem extends Zend_Validate_Abstract 
{   
    /**
     * Error constants
     */ 
    const ERROR_PRICE_EMPTY = 'priceEmpty';  
    const ERROR_RECEIPT_EMPTY = 'receiptEmpty';  
    const ERROR_SERIAL_EMPTY = 'serialEmpty';  
   
    /**
     * @var array Message templates
     */    
    protected $_messageTemplates = array(
        self::ERROR_PRICE_EMPTY => "Price can't be empty",
        self::ERROR_RECEIPT_EMPTY => "Receipt can't be empty",
        self::ERROR_SERIAL_EMPTY => "Serial can't be empty",
    );    
      
    /**
     * @param unknown_type $value
     * @return boolean 
     */
    public function isValid($value, &$validLine = array()) {
    
   // Ce que j'ai rajouté    
        $this->_error = ""; 
   //-----------------------

        $valid = true;    

        
    $price = $value['item_price'];                         
         $receipt = $value['item_receipt'];                    
        $serial = $value['item_serialNumber'];                

        
        if (empty($price)) {
            $this->_error(self::ERROR_PRICE_EMPTY);
            $valid = false;
        }
        if (empty($receipt)) {
            $this->_error(self::ERROR_RECEIPT_EMPTY);
            $valid = false;
        }
        if (empty($serial)) {
            $this->_error(self::ERROR_SERIAL_EMPTY);
            $valid = false;
        }        


       etc ..............

        
        return $valid;        
    }
    
}

J’ai donc rajouté ce         $this->_error = "";
Mais sans résultat.



Edit2: je construit et détruit l'objet à chaque itération de la boucle. C'est pas terrible mais je vois pas quoi faire d'autre pour l'instant

Dernière modification par maryooman (22-06-2010 14:47:57)

Hors ligne

 

#9 22-06-2010 15:06:43

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: Utilisation des validateurs de formulaire ailleurs que dans un formula

J'ai trouvé !

Il fallait rajouter ça (c'est dans la doc officiel)

Code:

$this->_setValue($value);

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