Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation Zend2:将电子邮件验证限制为仅一条错误消息?_Validation_Email_Zend Framework2 - Fatal编程技术网

Validation Zend2:将电子邮件验证限制为仅一条错误消息?

Validation Zend2:将电子邮件验证限制为仅一条错误消息?,validation,email,zend-framework2,Validation,Email,Zend Framework2,我对电子邮件字段进行了以下验证设置: $inputFilter->add($factory->createInput(array( 'name' => 'email', 'required' => true, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), ),

我对电子邮件字段进行了以下验证设置:

$inputFilter->add($factory->createInput(array(
    'name'     => 'email',
    'required' => true,
    'filters'  => array(
        array('name' => 'StripTags'),
        array('name' => 'StringTrim'),
    ),
    'validators' => array(
        array(
            'name'    => 'StringLength',
            'options' => array(
                'encoding' => 'UTF-8',
                'min'      => 1,
                'max'      => 255,
            ),
        ),
        array(
            'name'    => 'EmailAddress',
            'options' => array(
                'messages' => array(
                    \Zend\Validator\EmailAddress::INVALID_HOSTNAME => 'You did not enter a valid e-mail address.' 
                ),
            ),
        )
    ),
)));
问题是,如果我键入以下内容:bla@bla“,我得到以下触发错误:

You did not enter a valid e-mail address.
The input does not match the expected structure for a DNS hostname
The input appears to be a local network name but local network names are not allowed
这样做太乏味了:

array(
    'name'    => 'EmailAddress',
    'options' => array(
        'messages' => array(
            \Zend\Validator\EmailAddress::INVALID => 'You did not enter a valid e-mail address.' , 
            \Zend\Validator\EmailAddress::INVALID_FORMAT => 'You did not enter a valid e-mail address.' , 
            \Zend\Validator\EmailAddress::INVALID_HOSTNAME => 'You did not enter a valid e-mail address.' , 
            \Zend\Validator\EmailAddress::INVALID_LOCAL_PART => 'You did not enter a valid e-mail address.' , 
            \Zend\Validator\EmailAddress::INVALID_MX_RECORD => 'You did not enter a valid e-mail address.' , 
            \Zend\Validator\EmailAddress::INVALID_SEGMENT => 'You did not enter a valid e-mail address.' , 
        ),
    ),
)
难道没有更好的办法吗

更新

而且,这不起作用。我最终还是会:

 You did not enter a valid e-mail address.
 The input does not match the expected structure for a DNS hostname
 The input appears to be a local network name but local network names are not allowed

有什么想法吗?

在没有第二个参数的情况下调用验证器上的
setMessage
,将设置所有消息:

$email = $factory->createInput(array(
    'name'     => 'email',
    'required' => true,
    'filters'  => array(
        array('name' => 'StripTags'),
        array('name' => 'StringTrim'),
    ),
    'validators' => array(
        array(
            'name'    => 'StringLength',
            'options' => array(
                'encoding' => 'UTF-8',
                'min'      => 1,
                'max'      => 255,
            ),
        )
    ),
));

$emailValidate = new Zend_Validate_EmailAddress();
$emailValidate->setMessage('You did not enter a valid e-mail address.');
$email->addValidator($emailValidate, TRUE);

$inputFilter->add($email);
不确定以下方法是否也有效,但您可以尝试一下:

    array(
        'name'    => 'EmailAddress',
        'options' => array(
            'message' => 'You did not enter a valid e-mail address.'
        ),
    )

问题的解决办法如下:

'message' => array(
    \Zend\Validator\EmailAddress::INVALID_HOSTNAME=>'Email WRONG!',
),

好吧,这将导致三次相同的消息(这是我在早期阶段使用ZF2的经验)好的,这就是
addValidator
的第二个参数的作用。这意味着只会显示一条消息。它不会!它只吐出一个错误。谢谢这是最优雅的解决方案!啊,我错过了。这将是失败时的断链。也许这也很好解释:)@coderama您可以在配置中设置消息&true标志,因此如果您已经使用了数组样式,就不需要使用这些对象。