ZF2 电子邮件地址验证器

ZF2 EmailAddress validator

我正在通过包含两个部分的工厂创建 ZF2 电子邮件地址验证器,一个检查 email 是否已经在数据库中,两个:验证电子邮件。 问题是我的 NoObjectExists 验证器工作得很好,但实际电子邮件地址验证器没有(验证器将 "dsfsfhsadjkfnaskl" 识别为有效电子邮件)。这是我的代码,也许你们能看出它有什么问题?

    $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;

您的数组嵌套有误。您没有关闭包含 NoObjectExists 验证器的内容,因此 Email 验证器嵌套在其中。

尝试以下操作:

    $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;