仅当字段输入已更改时,Zend_From验证程序?

时间:2011-10-02 11:07:50

标签: zend-framework zend-form zend-validate

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

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

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

1 个答案:

答案 0 :(得分: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的电子邮件 - 所以当用户更改其电子邮件但另一个用户已经拥有该电子邮件时,无论如何都会抛出错误!