1

我正在编写一个后端系统,我想允许用户更改他们的电子邮件地址。我编写了一个自定义验证器来检查用户输入的电子邮件地址是否已经存在于我的数据库中。

现在我遇到了一个问题:表单中填充了用户数据,因此他的电子邮件地址是电子邮件字段的默认值。现在,如果用户提交表单,我的验证器会抛出一个错误,因为(当然)这个电子邮件地址确实已经存在!

我怎么解决这个问题?也许验证器不是这样做的正确方法?或者是否有解决方案来检测用户是否更改了默认值并仅在这种情况下触发验证器?

4

1 回答 1

3

呵呵,这是第一次遇到验证者的常见问题。关键是从验证器中删除一个 id,在验证器中从子句中排除当前用户 ID:

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

编辑:进一步解释这是做什么的。它仍然从数据库中获取所有电子邮件地址,并且仍然检查是否存在错误冲突。如果存在电子邮件,它只会忽略来自 id=$id_to_edit 的电子邮件 - 因此,当用户更改其电子邮件但另一个用户已经拥有该电子邮件时,无论如何都会抛出错误!

于 2011-10-02T12:30:23.177 回答