2010-07-24 5 views
1

Ceci est étrange. J'essaye de placer le message d'erreur pour mon élément de validation d'email sous forme de Zend. D'autres champs fonctionnent correctement - mais pas par courriel - quoi de neuf?impossible de définir le message d'erreur pour la validation d'e-mail-Zend-formulaire

bit code:

$name = new Zend_Form_Element_Text('name'); 
     $name ->setLabel('Name:') 
       ->setRequired(true) 
       ->addValidator('Alnum') 
       ->addValidator('NotEmpty'); 
     $name ->getValidator('NotEmpty')->setMessage('Please enter your name.'); 
     $name ->getValidator('Alnum')->setMessage('Name can only contain letters and spaces.'); 

$email = new Zend_Form_Element_Text('email'); 
     $email ->setLabel('Email:') 
      ->setRequired(true) 
       ->addFilter('StringToLower') 
       ->addValidator('NotEmpty') 
       ->addValidator('EmailAddress'); 

     $email ->getValidator('NotEmpty')->setMessage('Please enter your email address.'); 
     $email ->getValidator('EmailAddress')->setMessage('Email is not in proper format.'); 

Nom fonctionne, mais email ne fonctionne pas.

Je reçois toujours le message d'erreur defauly: '' is no valid email address in the basic format [email protected]

Répondre

6

Vous devez spécifier le type de message:

$email->getValidator('emailAddress')->setMessage("'%value%' is not valid, use something like [email protected]",Zend_Validate_EmailAddress::INVALID_FORMAT); 

Prenez cela comme exemple:

protected $_messageTemplates = array(
     self::INVALID   => "Invalid type given, value should be a string", 
     self::INVALID_FORMAT  => "'%value%' is no valid email address in the basic format [email protected]", 
     self::INVALID_HOSTNAME => "'%hostname%' is no valid hostname for email address '%value%'", 
     self::INVALID_MX_RECORD => "'%hostname%' does not appear to have a valid MX record for the email address '%value%'", 
     self::INVALID_SEGMENT => "'%hostname%' is not in a routable network segment. The email address '%value%' should not be resolved from public network.", 
     self::DOT_ATOM   => "'%localPart%' can not be matched against dot-atom format", 
     self::QUOTED_STRING  => "'%localPart%' can not be matched against quoted-string format", 
     self::INVALID_LOCAL_PART => "'%localPart%' is no valid local part for email address '%value%'", 
     self::LENGTH_EXCEEDED => "'%value%' exceeds the allowed length", 
    ); 
+0

Y at-il un moyen facile de faire un message d'erreur qui fonctionnera pour toutes ces erreurs? IE: "Il y a un problème avec votre adresse e-mail." Merci! – Joel

+0

Je pense que vous pouvez étendre le validateur emailAddress et modifier la variable protégée $ _messageTemplates afin que vous n'avez même pas besoin de définir le message. http://stackoverflow.com/questions/1811085/zend-framework-custom-validation-classes http://framework.zend.com/manual/fr/zend.validate.writing_validators.html –

0

vous devez créer sur mesure classe d'erreur. Dans mon cas:

J'ai créé la classe de validation électronique personnalisé dans la bibliothèque/Zend/Valider dossier

class Zend_Validate_Email extends Zend_Validate_Abstract 
{ 

    const INVALID = 'Email is required'; 
    protected $_messageTemplates = array(
    self::INVALID => "Invalid Email Address", 
    ); 

    public function isValid($value) 
    { 
     if(filter_var($value, FILTER_VALIDATE_EMAIL) === false) { 
      $this->_error(self::INVALID); 
      return false; 
     } else { 
      // We only check the presence of a dot on the domain part 
      $components = explode("@", $value); 
      $domain = $components[1]; 

      if (strpos($domain, ".") === false) { 
       $this->_error(self::INVALID); 
       return false; 
      } 

      return true; 
     } 
    } 
} 

et utilisé ma forme comme

$email_validate = new Zend_Validate_Email(); 

$neValidator = new Zend_Validate_NotEmpty(); 

$neValidator->setMessage('Please enter email.'); 

$emailaddress = new Zend_Form_Element_Text('EmailAddress'); 

$emailaddress->setRequired(true) 

      ->setAttrib('size', '30') 

      ->addFilter('StripTags') 

      ->setAttrib('MaxLength',100) 

      ->addValidator($neValidator,TRUE) 

       ->addValidator($email_validate,TRUE) 

      ->setAttrib('class','textbox') 

      ->setDecorators($decorators); 

espère que cela vous aidera

0
$email_validate = new Zend_Validate_Email(); 
$neValidator = new Zend_Validate_NotEmpty(); 
$neValidator->setMessage('Please enter email.'); 
$emailaddress = new Zend_Form_Element_Text('EmailAddress'); 
$emailaddress->setRequired(true) 
Questions connexes