Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-07-2008 15:12:16

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

[Zend_Validate_StringEquals] Comment l'utiliser ?

Bonjour,

Dans la documentation, il mentionne une certaine classe nommée Zend_Validate_StringEquals. A première vue, elle n'est pas dans 1.5 donc je me dis qu'il faut l'écrire.

Bref, je fais sauf que j'ai quelques soucis pour récupérer les valeurs des champs en question... J'ai du loupé un passage où je ne sais quoi parce que je n'arrive pas à récupérer l'array contenant les valeurs des champs dans ma classe StringEquals hmm

Code:

<?php
$validators = array(
    'password' => array(
        'StringEquals',
        'fields' => array('password1', 'password2')
    )
);
// Invokes hypothetical class Zend_Validate_StringEquals, passing an array argument
// containing the values of the two input data fields named 'password1' and 'password2'.

Merci d'avance de votre aide !

Hors ligne

 

#2 01-07-2008 17:22:45

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zend_Validate_StringEquals] Comment l'utiliser ?

J'ai finalement écris ma classe comme ceci :

Code:

public function __construct($field1, $field2) {
        $this->_field1 = $field1;
        $this->_field2 = $field2;
    }
    
    public function isValid($value, $context = null) {        
        if(strcmp($context[$this->_field1], $context[$this->_field2]) != 0) {
            $this->_error(self::NOT_EQUALS);
            return false;
        }
        
        return true;
    }

Mais je ne sais pas trop si c'est vraiment comme ça qu'il faudrait le faire...

Dernière modification par Akis (01-07-2008 17:23:02)

Hors ligne

 

#3 03-07-2008 09:36:02

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

Re: [Zend_Validate_StringEquals] Comment l'utiliser ?

Moi ca me choque pas.
J'ai aussi fait un truc dans le genre pour des passwords.

Code:

<?php
require_once 'Zend/Validate/Abstract.php';

class Rx_Validate_PasswordConfirmation extends Zend_Validate_Abstract
{
    const NOT_MATCH = 'notMatch';

    protected $_messageTemplates = array(
        self::NOT_MATCH => 'Password confirmation does not match'
    );

    public function isValid($value, $context = null)
    {
        $value = (string) $value;
        $this->_setValue($value);

        if ( 
            (is_array($context) and isset($context['pwd_confirm']) and ($value == $context['pwd_confirm']))
            ||
            (is_string($context) and ($value == $context))
           )
        {
            return true;
        }

        $this->_error(self::NOT_MATCH);
        return false;
    }
}

Hors ligne

 

#4 03-03-2009 17:45:34

hthetiot
Nouveau membre
Date d'inscription: 04-05-2007
Messages: 8

Re: [Zend_Validate_StringEquals] Comment l'utiliser ?

Cette version supporte la validation de N champ et respect les standarts de code Zend Framework.

Validator Class

Code:

<?php
/**
 * StringEquals class in /BazeZF/Framework/Validate
 *
 * @category   BazeZF_Framework
 * @package    BazeZF
 * @copyright  Copyright (c) 2008 BazeZF
 * @author     Harold Thétiot (hthetiot)
 */

class BaseZF_Framework_Validate_StringEquals extends Zend_Validate_Abstract
{
    /**
     * Error codes
     * @const string
     */
    const NOT_MATCH = 'notMatch';
    const UNABLE_TO_MATCH = 'unableToMatch';

    /**
     * Error messages
     * @var array
     */
    protected $_messageTemplates = array(
        self::NOT_MATCH         => 'Fields do not match',
        self::UNABLE_TO_MATCH   => 'Unable to compare fields',
    );

    /**
     * Sets validator options
     *
     * @param  string $field
     * @return void
     */
    public function __construct() {
        $this->_fields = func_get_args();
    }

    /**
     * Defined by Zend_Validate_Interface
     *
     * Returns true if and only if the string length of $value is at least the min option and
     * no greater than the max option (when the max option is not null).
     *
     * @param  string $value
     * @return boolean
     */
    public function isValid($value, $context = null) {

        $contextFields = array();
        foreach ($this->_fields as $fieldName) {

            // prevent partial validation
            if (!isset($context[$fieldName])) {
                $this->_error(self::UNABLE_TO_MATCH);
                return false;
            }

            $contextFields[] = $context[$fieldName];
        }

        if(call_user_func_array('strcmp', $contextFields) != 0) {
            $this->_error(self::NOT_MATCH);
            return false;
        }

        return true;
    }
}

In form build process:

Code:

$stringEquals = new BaseZF_Framework_Validate_StringEquals('password', 'password_check');
$this->getElement('password_check')->addValidator($stringEquals);

Plus de snipets ici: http://github.com/hthetiot/basezf/commits/master

Hors ligne

 

#5 31-08-2010 13:44:54

kantoche
Nouveau membre
Date d'inscription: 31-08-2010
Messages: 2

Re: [Zend_Validate_StringEquals] Comment l'utiliser ?

Bonjour,

Je rebondis sur le sujet pour demander comment il est possible dans les messages d'erreur de faire apparaître chacune des deux valeurs du tableau que constitue %value%, car

Code:

self::NOT_MATCH => "'%value%' and '%value%' don't match"

donne pour résultat :

ERROR: password_check : 'Array' and 'Array' don't match

Je ne suis pas parvenu à extraire les valeurs associées à 'password' et 'password_check'. Vous avez une idée ?

Hors ligne

 

#6 31-08-2010 15:58:36

Dede
Membre
Date d'inscription: 26-06-2009
Messages: 99

Re: [Zend_Validate_StringEquals] Comment l'utiliser ?

Pour ma part j'ai fais ça avant la methode "_setValue":

Code:

$values = $value.' et '.$context['pwd_confirm'];
$this->_setValue($values);

je ne sais pas si c'est très Zend ?


« Il ne faut pas lier un navire à une seule ancre, ni une vie à un seul espoir. »
Epictète
http://www.noumcreation.com

Hors ligne

 

#7 31-08-2010 17:44:27

kantoche
Nouveau membre
Date d'inscription: 31-08-2010
Messages: 2

Re: [Zend_Validate_StringEquals] Comment l'utiliser ?

En effet, ça fonctionne de cette façon, mais je ne pense pas que cette solution soit complétement satisfaisante, car une partie du message (' et ') se trouve intégrée dans la fonction isValid().

En même temps, quand on examine le code source de Zend_Validate_Abstract, on n'a pas vraiment le choix :

Code:

$message = str_replace('%value%', (string) $value, $message);

J'ai quand même ressorti le bout de message dans une variable pour faire plus propre :

Code:

$values = $value['password1'].$this->partOfMessage.$value['password2'];
$this->_setValue($values);

Dernière modification par kantoche (31-08-2010 17:44:42)

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