2016-11-23 23 views
0

我想將電子郵件驗證複製到註冊頁面。目前,以下驗證在電子郵件上實施。如何在Zend框架中註冊新用戶時檢查重複的電子郵件條目3

$inputFilter->add(array(
      'name'  => 'email', 
      'required' => true, 
      'filters' => array(
       array('name' => 'StripTags'), 
       array('name' => 'StringTrim'), 
      ), 
      'validators' => array(
       array(
        'name' => 'NotEmpty', 
        'options' => array(
         'messages' => array(
          $isEmpty => 'Email can not be empty.', 
         ), 
        ), 
        'break_chain_on_failure' => true 
       ), 
       array(
        'name' => 'EmailAddress', 
        'options' => array(
         'messages' => array(
          $invalidEmail => 'Enter Valid Email Address.' 
         ) 
        ) 
       ) 
      ) 
      ) 
     ); 
+1

您需要創建一個自定義驗證器來查詢數據庫中的電子郵件。如果你發現一個匹配,驗證器應該返回false,否則返回true。如果您正在使用Doctrine實體,則存在一個已經存在的['ObjectExists'驗證器](https://github.com/doctrine/DoctrineModule/blob/master/docs/validator.md#use-together-with-zend-framework -2表格)你可以使用。 – AlexP

+1

如果您正在使用'TableGateWay',請將您的表插入inputFilter並創建[回調驗證程序](https://framework.zend.com/manual/2.4/en/modules/zend.validator.callback。 HTML)在那裏處理驗證或創建您的自定義驗證器。 – Kwido

回答

1

如果我理解正確,您不希望電子郵件被複制。

您可以添加Zend\Validator\Db\NoRecordExists驗證:

'validators' = array(
    array(
     'name' => 'NotEmpty', 
     'options' => array(
      'messages' => array(
       $isEmpty => 'Email can not be empty.', 
      ), 
     ), 
     'break_chain_on_failure' => true 
    ), 
    array(
     'name' => 'EmailAddress', 
     'options' => array(
      'messages' => array(
       $invalidEmail => 'Enter Valid Email Address.' 
      ) 
     ) 
    ), 
    array(
     'name' => 'Zend\Validator\Db\NoRecordExists', 
     'options' => array(
      'table' => 'your_table_name', 
      'field' => 'email', 
      'adapter' => 'your_db_adapter' 
     ) 
    ) 
) 

你不應該忘記注入你的$db_adapter到表單。

相關問題