Zend_From Validator только если поле ввода изменилось? - PullRequest
1 голос
/ 02 октября 2011

Я пишу бэкэнд-систему и хочу разрешить пользователям менять свой адрес электронной почты.Я написал специальный валидатор, чтобы проверить, существует ли уже введенный пользователем адрес электронной почты в моей базе данных.

Теперь я столкнулся с проблемой: форма заполнена данными пользователя, поэтому его адрес электронной почтызначение по умолчанию для поля электронной почты.Теперь, если пользователь отправляет форму, мои валидаторы выдают ошибку, потому что (конечно) этот адрес электронной почты уже существует!

Как я могу решить эту проблему?Может быть, валидатор не правильный подход для этого?Или есть решение, чтобы определить, изменил ли пользователь значение по умолчанию и запустить валидатор только в этом случае?

1 Ответ

3 голосов
/ 02 октября 2011

Хе-хе, это обычная проблема, с которой сталкиваются с валидаторами в первый раз. Ключ должен удалить этот один идентификатор из валидатора, внутри вашего валидатора исключить текущий идентификатор пользователя из предложения:

$validator = new Zend_Validate_Db_NoRecordExists(
  array(
      'table' => 'users',
      'field' => 'email',
      'exclude' => array(
        'field' => 'id',
        'value' => $id_to_edit
    )
  )
);

Изменить: для дальнейшего объяснения того, что это делает. Он по-прежнему получает все адреса электронной почты из базы данных и проверяет, не произошел ли конфликт. Если электронная почта существует, она просто игнорирует электронную почту с id = $ id_to_edit - поэтому, когда пользователь меняет свою электронную почту, но другой пользователь уже имеет эту электронную почту, ошибка все равно выдается!

...