Ecrire un validateur personnalisé avec le Zend Framework
by Joris on août 3, 2009
Voici un petit tutoriel très simple pour ajouter des validateurs personnalisés à votre application Zend Framework. Cela se fait en deux secondes montre en main.
Partons du principe que votre application est déjà un minimum configurée avec l’autoloader :
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php // application/Bootstrap.php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $loader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Default', 'basePath' => dirname(__FILE__) )); return $loader; } } |
Nous allons ajouter une ressource à l’application qui sera en fait un répertoire dans lequel nous allons ajouter nos validateurs, ajoutons et déclarons donc notre dossier « validators » dans notre application Zend Framework :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php // application/Bootstrap.php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $loader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Default', 'basePath' => dirname(__FILE__) )); // Ajoute la ressource "validator" dans le namespace par defaut de l'application $loader->addResourceType('validator', 'validators', 'Validator'); return $loader; } } |
Allez ensuite dans votre répertoire « validators » et hop, créez des ressources comme pour les modèles, les contrôleurs ou les vues.
Les validateurs doivent hériter de la classe Zend_Validate_Abstract qui implémente l’interface Zend_Validate_Interface ce qui oblige votre classe à déclarer la méthode isValid($param).
1 2 3 4 5 6 7 8 | <?php // application/validators/Custom.php class Default_Validator_Custom extends Zend_Validate_Abstract { public function isValid($value) { } } |
Bon, c’est bien beau un validateur vide mais c’est inutile
. Faisons un validateur simple type test de mot de passe avec message personnalisé pour l’erreur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php // application/validators/Custom.php class Default_Validator_Custom extends Zend_Validate_Abstract { const E_PASSWD = 'passwd'; protected $_messageTemplates = array( self::E_PASSWD => 'Mot de passe incorrect !' ); public function isValid($value) { $this->_setValue($value); if ($value !== "vph3Gv2x715r120cQrMep") { $this->_error(self::E_PASSWD); return false; } return true; } } |
Et voila, on a notre validateur personnalisé. Maintenant, dans notre formulaire, il suffit d’instancier la classe de notre validateur et ça marche tout seul.
Exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php // application/forms/Connexion.php class Default_Form_Connexion extends Zend_Form { public function init() { $this->setAction('/connexion/') ->setMethod('post') ->addElement('password', 'passwd', array( 'label' => 'Mot de passe' , 'required' => true , 'filter' => 'StringTrim' , 'validators' => array( array('NotEmpty', true, array( 'messages' => 'Veuillez remplir le champ' )), array(new Default_Validator_Custom(), true) ))) ->addElement('submit', 'send', array( 'label' => 'Connexion' )); } } |
Essayez et ça devrait fonctionner.
Vous venez d’apprendre en 20 secondes comment créer très simplement un validateur personnalisé à votre application. Même si la panoplie de validateurs est déjà bien riche au niveau du Zend Framework, je vous recommande de créer vous-même vos validateurs pour y gérer de manière plus simple et plus clair les messages d’erreur ; d’autant plus si vos validateurs sont complexes, évitez de surcharger le code de déclaration de vos formulaire et préférez instancier des classes ![]()
Pour en savoir un peu plus sur l’écriture des Validateurs.
Bonne soirée ![]()
One comment
[...] Ecrire un validateur personnalisé avec le Zend Framework [...]
by Two years of rand(0)-mies « rand(0) on 19/02/2011 at 20:30. #