2016-11-23 3 views
0

Я хочу дублировать проверку электронной почты на страницу регистрации. В настоящее время по электронной почте выполняется следующая проверка.Как проверить наличие дубликатов записей электронной почты при регистрации новых пользователей в zend framework 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 в форму.

Смежные вопросы