Zend Framework : validateur pour une URL

Logo Zend Framework

Bizarrement, le Zend Framework ne fournit pas de validateur pour vérifier que la syntaxe d'une URL est correcte. Pourtant, le composant Zend_Uri dispose d'une méthode check qui remplit ce rôle. On peut s'en servir pour écrire un validateur personnalisé :

<?php
class Wiip_Validate_Uri extends Zend_Validate_Abstract
{
    const 
BAD_URI 'badUri';

    protected 
$_messageTemplates = array(
        
self::BAD_URI => "'%value%' n'est pas une URI valide"
    
);

    public function 
isValid($value)
    {
        
$this->_setValue($value);

        if (!
Zend_Uri::check($value)) {
            
$this->_error(self::BAD_URI);
            return 
false;
        }

        return 
true;
    }
}
?>

Mise à jour du 15/11/2010 : passe la clé du message à la méthode _error.

Vous pouvez l'utiliser dans vos formulaires de cette façon :

<?php
class MonFormulaire extends Zend_form
{
    public function 
init()
    {
        [..]

        
// Ajoute un champ "web" au formulaire
        
$this->addElement(
            
'text',
            
'web',
            array(
                
'label' => 'Site Web :',
                
'size' => 64,
                
'validators' => array('Uri')
            )
        );

        
// Ajoute le préfixe aux chemins de recherche des plugins de validation
        
$this->web->addPrefixPath('Wiip_Validate''Wiip/Validate''validate');

        [..]
     }
}
?>

Note du 29/09/2009 : Zend_Uri ne supporte que les schémas HTTP et HTTPS. On ne peut donc pas s'en servir pour l'instant pour valider une adresse FTP par exemple.

Comments

Merci pour ce Validator très utile, mais il
semble qu'il y ai un petit oubli, $messageKey
dans function _error($messageKey) n'est pas
optionnel, tout du moins dans ZF 1.11.0

Pour corriger:
$this->_error(self::BAD_URI);
au lieu de :
$this->_error();

Oui, tout à fait, je confirme, il faut passer la clé du message à la méthode error. Merci de me l'avoir signalé.

Add new comment