2017-02-03 246 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