Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
<?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
J'ai finalement écris ma classe comme ceci :
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
Moi ca me choque pas.
J'ai aussi fait un truc dans le genre pour des passwords.
<?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
Cette version supporte la validation de N champ et respect les standarts de code Zend Framework.
Validator Class
<?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:
$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
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
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
Pour ma part j'ai fais ça avant la methode "_setValue":
$values = $value.' et '.$context['pwd_confirm']; $this->_setValue($values);
je ne sais pas si c'est très Zend ?
Hors ligne
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 :
$message = str_replace('%value%', (string) $value, $message);
J'ai quand même ressorti le bout de message dans une variable pour faire plus propre :
$values = $value['password1'].$this->partOfMessage.$value['password2']; $this->_setValue($values);
Dernière modification par kantoche (31-08-2010 17:44:42)
Hors ligne
Pages: 1