2017-02-03 285 views
0

我正在通过工厂创建ZF2电子邮件地址验证器,该工厂有2个部分,一个检查emaill是否已经在数据库中,两个:验证电子邮件。 问题是我的NoObjectExists验证器工作得很好,但电子邮件地址验证器没有(验证器将“dsfsfhsadjkfnaskl”识别为有效的电子邮件)。这是我的代码,也许你们可以发现它有什么问题?ZF2电子邮件地址验证器

$factory = new \Zend\InputFilter\Factory(); 

    $input = $factory->createInput(array(
     'name' => 'email', 
     'required' => false, 
     'filters' => array(
      0 => array(
       'name' => 'Zend\Filter\StringTrim', 
       'options' => array(), 
      ), 
     ), 
     'validators' => array(
      0 => array(
        'name' => '\DoctrineModule\Validator\NoObjectExists', 
        'options' => array(
         'object_repository' => $this, 
         'fields' => array('email'), 
       ), 
      1 => array(
        'name' => '\Zend\Validator\EmailAddress', 
        'options' => array(
         'allow' => \Zend\Validator\Hostname::ALLOW_DNS, 
         'domain' => true, 
        ), 
       ), 
      ), 
     ), 
    )); 

    return $input; 
+0

我其实是想给一些建议,我把宝贵的时间中添加回答你的问题。我的答案实际上被别人认为是被其他人认为是有用的。而不是表示一些赞赏和感谢我,而是决定放弃我的答案。对于IMO来说不是一件非常有礼貌的事情。你的问题实际上并不适用于[StackOverflow mcve](https://stackoverflow.com/help/mcve),你应该很高兴人们甚至可以阅读它。我删除了我的答案,所以你得到了你想要的东西,但不要指望我将来有任何帮助。祝你今天愉快! – Wilt

回答

2

您的数组嵌套有错误。您没有关闭包含NoObjectExists验证程序,因此电子邮件验证程序嵌套在里面。

尝试以下操作:

$factory = new \Zend\InputFilter\Factory(); 

    $input = $factory->createInput(array(
     'name' => 'email', 
     'required' => false, 
     'filters' => array(
      0 => array(
       'name' => 'Zend\Filter\StringTrim', 
       'options' => array(), 
      ), 
     ), 
     'validators' => array(
      0 => array(
       'name' => '\DoctrineModule\Validator\NoObjectExists', 
       'options' => array(
        'object_repository' => $this, 
        'fields' => array('email'), 
       ), 
      ), 
      1 => array(
       'name' => '\Zend\Validator\EmailAddress', 
       'options' => array(
        'allow' => \Zend\Validator\Hostname::ALLOW_DNS, 
        'domain' => true, 
       ), 
      ), 
     ), 
    )); 

    return $input; 
+0

哦,这对我来说很愚蠢,thnx是快速的地方。 – Auris

+0

@Auris如果你习惯排列阵列,你可以在将来避免这些问题。 – Wilt

+0

是的,这就是通常所做的,但是当做快速复制粘贴时,这些东西有时候会滑过:)无论如何,thnx。 – Auris