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标志,因此如果您已经使用了数组样式,就不需要使用这些对象。