2013-07-18 66 views
6

我有一个输入过滤器,其验证器配置为一个电子邮件字段看起来像;自定义Zend Framework 2电子邮件字段验证器错误消息

'validators' => array(
    array (
     'name' => 'EmailAddress', 
     'options' => array(
      'messages' => array(
       'emailAddressInvalidFormat' => "Email address doesn't appear to be valid.", 
      ) 
     ), 
    ), 
    array (
     'name' => 'NotEmpty', 
      'options' => array(
       'messages' => array(
        'isEmpty' => 'Email address is required', 
       ) 
      ), 
     ), 
    ), 
), 

它的工作原理,这部分是好的,但我会在获得永远笑了这里的经营单位,是,如果我拿出那呼噜此错误信息给用户的应用程序:

输入不匹配针对图案

'/^[a-zA-Z0-9.!#$% &' +/=^_`{|}?〜 - ] + @ [A-ZA- Z0-9 - ] +(?:[a-zA-Z0-9 - ] +) $ /'

有一个奇怪的书呆子喜剧埋在那里(是的,我意识到这是准确的,但,rofl)。

我对这里的好心人两个问题:

我怎么可以自定义错误消息?我似乎无法找到正确的钥匙,因为我很容易为'emailAddressInvalidFormat'

另外,是否可以将所有错误合并为一个?我的意思是。而不是发布:

“您的电子邮件模式,就像离开大楼&您的邮箱不能 空白&您的电子邮件不会出现有效”

我可以把一个“单点故障”邮件的消息?

“嗨,请检查您的电子邮件,有些事情是不正确的!”

感谢您一如既往的帮助。

UPDATE

投票这里 https://github.com/zendframework/zend-validator/issues/41

+2

为了避免在发生错误时出现多条消息,请添加验证器''break_chain_on_failure'=> true,'。 – Tounu

+0

我可以使用它与一个单一的错误消息?如何指定? – Saeven

+0

这对我来说好像是EmailAddress验证器中的一个错误。我通常只需设置一个消息时要使用的验证器返回false: '验证'=>数组( \t \t \t \t \t \t阵列( \t \t \t \t \t \t \t '名称'=> 'EmailAddress的', \t \t \t \t \t \t \t '选项'=>数组( \t \t \t \t \t \t \t \t '消息'=> '无效电子邮件地址', \t \t \t \t \t \t \t) \t \t \t \t \t \t) \t \t \t \t \t),(注意 '消息' 的单数形式。这个工作除了使用EmailAddress验证器,它仍然吐出模式匹配消息,它实际上来自正则表达式验证器(NOT_MATCH)。 – Ruben

回答

0

“输入不匹配阻止图形”消息,这个错误似乎是Zend\Validator\Regex::NOT_MATCH实际上,不是Zend\Validator\EmailAddress类。

从您的代码中,不清楚您在哪里以及是否使用Regex验证程序。我相信EmailAddress内部不使用Regex

如果你想定制Regex消息的话,大概是这样的:

array (
    'name' => 'Regex', 
    'options' => array(
     'messages' => array(
      'regexNotMatch' => "Not so nerdy message here.", 
     ) 
    ), 
), 
+0

不幸的是,这不起作用,我收到''regexNotMatch'没有消息模板。 ZF 2.2.6 – Saeven

4

在ZF2试试这个自定义消息电子邮件验证:

'validators' => array(
       array( 
        'name' => 'EmailAddress', 
        'options' => array( 
         'messages' => array(
         \Zend\Validator\EmailAddress::INVALID_FORMAT => '"Hey bud, check your email, something ain\'t right!"' 
         )    
        )     
       )    
      )   
0

这不是可能仅指定一条消息,但它应该也可以工作:

$message = sprintf(
     $this->getTranslate()->translate(
      '%s filled is not a valid e-mail address, please inform a valid in the field.' 
     ), 
     $entity 
    ); 

    return array(
     'name' => 'EmailAddress', 
     'options' => array(
      'messages' => array(
       \Zend\Validator\EmailAddress::INVALID   => $message, 
       \Zend\Validator\EmailAddress::INVALID_FORMAT  => $message, 
       \Zend\Validator\EmailAddress::INVALID_HOSTNAME => $message, 
       \Zend\Validator\EmailAddress::INVALID_MX_RECORD => $message, 
       \Zend\Validator\EmailAddress::INVALID_SEGMENT => $message, 
       \Zend\Validator\EmailAddress::DOT_ATOM   => $message, 
       \Zend\Validator\EmailAddress::QUOTED_STRING  => $message, 
       \Zend\Validator\EmailAddress::INVALID_LOCAL_PART => $message, 
       \Zend\Validator\EmailAddress::LENGTH_EXCEEDED => $message, 
      ), 
     ), 
     'break_chain_on_failure' => true 
    ); 
2

据ZF2,邮箱地址验证是:

$this->add(array(
     'name'  => 'email', 
     'required' => true, 
     'validators' => array(
      array(
       'name' => 'EmailAddress', 
       'options' => array(
        'message' => array(
         \Zend\Validator\EmailAddress::INVALID => "Invalid type given. String expected", 
         \Zend\Validator\EmailAddress::INVALID_FORMAT  =>"The input is not a valid email address. Use the basic format [email protected]", 
         \Zend\Validator\EmailAddress::INVALID_HOSTNAME =>"'%hostname%' is not a valid hostname for the email address", 
         \Zend\Validator\EmailAddress::INVALID_MX_RECORD =>"'%hostname%' does not appear to have any valid MX or A records for the email address" , 
         \Zend\Validator\EmailAddress::INVALID_SEGMENT =>"'%hostname%' is not in a routable network segment. The email address should not be resolved from public network", 
         \Zend\Validator\EmailAddress::DOT_ATOM   =>"'%localPart%' can not be matched against dot-atom format" , 
         \Zend\Validator\EmailAddress::QUOTED_STRING  =>"'%localPart%' can not be matched against quoted-string format", 
         \Zend\Validator\EmailAddress::INVALID_LOCAL_PART =>"'%localPart%' is not a valid local part for the email address" , 
         \Zend\Validator\EmailAddress::LENGTH_EXCEEDED =>"The input exceeds the allowed length", 
         ), 
       ), 
      ), 
     ), 
    )); 

和额外的验证可能是正则表达式如上所述,我也有NoObjectExists以确保邮件是不是在我db,如果电子邮件地址用于登录:

array(
    'name'  => 'DoctrineModule\Validator\NoObjectExists', 
    'options' => array(
     'object_repository' => $sm->get('doctrine.entitymanager.orm_default')->getRepository('MyMudole\Entity\User'), 
     'fields'   => 'email', 
     'message'=>'This email is associated with another user! Please use another email', 
    ), 
), 
相关问题