Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-02-2012 09:44:29

gmifsud
Membre
Date d'inscription: 29-04-2010
Messages: 75

[RÉSOLU] Zend_Form : interdire certains e-mails ?

Bonjour à tous,

j'utilise déjà des validateurs personnels pour comparer des dates de façon compliquée par exemple.

Mais dans le cas présent, j'aurais "tout simplement" besoin d'interdire un certain type d'e-mail (appartenant à un domaine précis) dans un champ de mon formulaire d'inscription.

Exemple, tous les e-mails de la forme quelquechose@domaineinterdit.fr, quel que soit ce "quelquechose" devrait renvoyer une erreur.


Dois-je faire mon propre validateur ou bien y a-t-il un moyen de la faire avec les validateurs de Zend ?
regex fonctionne bien (avec par exemple ->addValidator('regex', true, array('/^[a-z_0-9]*@domaineinterdit.fr/i')) ), mais pour accepter les e-mails de cette forme, pas pour les empêcher !
Il me faudrait un non-regex en gros. smile

Merci.

Dernière modification par gmifsud (09-02-2012 14:27:26)

Hors ligne

 

#2 09-02-2012 10:05:13

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [RÉSOLU] Zend_Form : interdire certains e-mails ?

Je suis pas doué du tout en regex mais tu dois pouvoir spécifié que tu ne veux pas que la chaîne 'domaineinterdit.fr' soit contenu dans l’intégralité de la chaîne.
Sinon un validateur serait plus simple, tu fais un truc générique qui reçoit en params un tableau de nom de domaine interdit.
big_smile

Hors ligne

 

#3 09-02-2012 10:16:42

Blount
Membre
Date d'inscription: 23-06-2009
Messages: 98
Site web

Re: [RÉSOLU] Zend_Form : interdire certains e-mails ?

J'ai eu besoin de faire cela dans un de mes projets. J'avais donc récupéré (ou fait, je ne sais plus) un validateur.

Code:

[lang=php]
<?php
class My_Validate_BanEmail extends Zend_Validate_Abstract
{
    const BAD_EMAIL = 'badEmail';

    protected $_messageTemplates = array(
        self::BAD_EMAIL => "Using '%value%' is forbidden"
    );

    protected $_patterns = array(
        '/.@gmail.*$/',
        '/.@yahoo.*$/',
        '/.@hotmail.*$/'
    );

    /**
     * @param array $patterns
     * @return My_Validate_BanEmail
     */
    public function setPatterns($patterns)
    {
        if (is_array($patterns)) {
            $this->_patterns = $patterns;
            return $this;
        }
        $this->_patterns = array($patterns);
        return $this;
    }

    /**
     * @return array
     */
    public function getPatterns()
    {
        return $this->_patterns;
    }

    public function isValid($value)
    {
        $this->_setValue($value);
        foreach ($this->getPatterns() AS $pattern) {
            if (preg_match($pattern, $value)) {
                $this->_setValue(preg_replace('/.*@/', '', $value));
                $this->_error(self::BAD_EMAIL);
                return false;
            }
        }
        return true;
    }
}

Ensuite, lors de la création de ton formulaire, voici un exemple :

Code:

[lang=php]
        $bansMails = new My_Validate_BanEmail();
        $bansMails->setPatterns(array(
            "/.*@domaineinterdit\.fr/",
            "/.*p0rn.*@.*/",
            "/truc@bidule\..*/"
        ));
        $this->addElement("text", "email", array(
            "label" => "E-Mail",
            "required" => true,
            "filters" => array("StringTrim"),
            "validators" => array($bansMails)
        ));

Tu peux supprimer les masques non utilisés et ne garder que le tien. L'utilisation est très simple.

Dernière modification par Blount (09-02-2012 10:17:43)

Hors ligne

 

#4 09-02-2012 14:27:00

gmifsud
Membre
Date d'inscription: 29-04-2010
Messages: 75

Re: [RÉSOLU] Zend_Form : interdire certains e-mails ?

Merci beaucoup Blount. J'ai utilisé et ton code et ça fonctionne à merveille.
Tu m'as évité la tâche de l'écrire moi-même et fait gagner un temps précieux, surtout en ce moment ! smile


Merci pour le conseil shadypierre, mais je vais utiliser la solution de Blount plutôt que de me plonger dans les méandres des expressions régulières (que j'apprécie par ailleurs, mais là je n'ai pas le temps).

Hors ligne

 

#5 09-02-2012 14:30:24

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [RÉSOLU] Zend_Form : interdire certains e-mails ?

Mon conseil c'était plutot exactement ce que dit Blount

Sinon un validateur serait plus simple, tu fais un truc générique qui reçoit en params un tableau de nom de domaine interdit.

c'est exactement ce que fait le validateur fournit big_smile

Hors ligne

 

#6 09-02-2012 17:05:43

gmifsud
Membre
Date d'inscription: 29-04-2010
Messages: 75

Re: [RÉSOLU] Zend_Form : interdire certains e-mails ?

Exact.
Je m'étais concentré sur ta première phrase, MEA CULPA.

Merci du conseil, donc. smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages