symfony1 - 更新/编辑上下文中的 sfValidatorDoctrineUnique

标签 symfony1 doctrine symfony-1.4 symfony-forms

我在两个不同的上下文中使用表单类:既可以创建新记录,也可以编辑该记录。我设置了如下验证器来检查 URL 字段是否唯一。

$this->validatorSchema->setPostValidator(new sfValidatorAnd(array(
   new sfValidatorDoctrineUnique(array('model' => 'Page', 'column' => array('url')), array('invalid' => 'This URL already exists.'))
)));

当我创建新记录时,验证器工作得很好。但是,在编辑现有记录时,它会引发错误,因为它将自己检测为重复。换句话说,如果我编辑记录但不更改 URL,则会引发重复错误。

这一定是一个常见问题,所以我想知道 Symfony 的处理方式是什么?基本上我希望它在保存时忽略自己(不存在重复),但仍然运行后验证器以确保不存在真正的重复。

最佳答案

更新情况确实由 sfValidatorDoctrineUnique 处理。

在您的情况下,如果具有给定 URL 的对象已经存在,验证器将检查您是否正在执行更新操作。使用 sfValidatorDoctrineUnique::isUpdate() 方法进行检查。

您的主键需要在提交的值中。

默认情况下,主键是自省(introspection)的。您可以通过传递给验证器的 *primary_key* 选项来提供它。

关于symfony1 - 更新/编辑上下文中的 sfValidatorDoctrineUnique,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5110693/

相关文章:

symfony1 - Symfony 表单 - 记住之前选择的文件

php - Doctrine继承和MySQL连接表限制

mysql - 分组依据和日期

symfony1 - Symfony 管理生成器 Doctrine executeCreate

php - Doctrine fromArray 错误?

php - 如何禁用 symfony 中的表单元素?

php - 多对多查找

symfony1 - 在迁移期间添加新的枚举列

php - symfony 1.4 解释并且不显示在模板中使用 fetchOne() 的 html 标签

php - Doctrine (symfony) YAML schema/fixture 约束问题