8
votes

Zend forme de la validation du courrier électronique

J'ai le code suivant pour générer un champ de saisie pour l'adresse e-mail de l'utilisateur xxx

maintenant, le problème est si l'utilisateur saisit un nom d'hôte invalide pour le courrier électronique, il génère 3 erreurs. Disons que l'utilisateur entrait «admin @ l» comme adresse électronique et les erreurs seront de
* 'L' n'est pas un nom d'hôte valide pour l'adresse e-mail 'admin @ l'
* 'L' ne correspond pas à la structure attendue pour un nom d'hôte DNS
* 'L' semble être un nom de réseau local, mais les noms de réseau locaux ne sont pas autorisés

Je veux juste qu'il ne donne qu'une erreur personnalisée au lieu de tout cela. Si je définis le message d'erreur "Adresse e-mail non valide" par la méthode AdderRormessage, elle générera à nouveau le même message contre la DB_VALIDATION.


0 commentaires

5 Réponses :


2
votes
    $mailValidator = new Validate_Email();
    $email->addValidator($mailValidator, true);

2 commentaires

Oui, mais j'ai aussi un validateur DB, qui vérifie si le courrier électronique est déjà utilisé pour vous inscrire au site. Et si j'ajoute le message ci-dessus, même dans le cas où le courrier électronique est valide mais existe dans la base de données, il affichera le message personnalisé.


Vérifiez-le !! Travaillé alors mieux sinon travaillé alors ça va !!



0
votes

Il semble manquer de nombreuses lignes ...

devrait probablement utiliser ceci: $ mailvalidator = nouveau zend_validate_emailaddress ();

Vous pouvez également faire quelques autres validations voir ici: http: // framework.zend.com/manual/fr/zend.validate.set.html


0 commentaires

8
votes

Eh bien, c'est une réponse tardive, mais je pense que c'est toujours utile.

ajoutez simplement true comme deuxième paramètre addvalidator () De Zend Docs ( http://framework.zend.com/apidoc/ 1.8 / ):

addvalidator (ligne 67)

Ajoute un validateur à la fin de la chaîne

Si $ breakchaainonfailure est vrai, alors si le validateur échoue, le prochain Validateur dans la chaîne, si l'on existe, ne sera pas exécuté.

retour: fournit une interface fluide

Accès: public

ici la signature: xxx

de sorte que le code est: xxx


0 commentaires

5
votes

Vous devez créer une instance de la classe Zend_Validate_EmailAddress et appelez la méthode SetMessages, puis remplacez les messages que vous aimez, pour supprimer ceux que vous avez mentionnés, ce serait quelque chose comme ceci:

$emailValidator->setMessages(array(
    Zend_Validate_EmailAddress::INVALID_FORMAT => "Your error message",
    Zend_Validate_Hostname::INVALID_HOSTNAME => "Your error message",
    Zend_Validate_Hostname::LOCAL_NAME_NOT_ALLOWED => "Your error message"
));


0 commentaires

0
votes

Utilisation d'un validateur personnalisé est le seul moyen que j'ai trouvé pour éviter ce problème.

Si ce que vous voulez est: p>

  • ayant un seul message d'erreur fort> si l'adresse e-mail est dans un format incorrect li>
  • Si le format est bon, alors validez si l'adresse e-mail est déjà dans la base de données li> ul>

    alors je vous suggère de faire quelque chose comme ceci: p> xxx pré>

    $ ceci-> getattrib ("user_id ') code> représente ID de l'utilisateur actuel em>. p>

    Il y a trois validateurs ici, tous ont leur deuxième paramètre $ breakonfailure code> défini sur false code >, donc si un validateur échoue, les autres ne seront pas appelés. p>

    Le premier validateur est e-mail fort>, qui est mon propre validateur personnalisé: P>

    class My_Validate_Email extends Zend_Validate_EmailAddress
    {
        public function getMessages()
        {
            return array('invalidEmail' => 'Your email address is not valid.');
        }
    }
    


0 commentaires