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.

Portrait de FredT

Merci pour ce Validator très

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();

Portrait de Maxence

Oui, tout à fait, je

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

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <php>.

Plus d'informations sur les options de formatage

CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.