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. #

Leave your comment

Not published