我在两个单独的上下文中使用表单类:既创建一个新记录,也编辑该记录。我已经设置了后验证器,如下所示,以检查URL字段是否唯一。更新/编辑上下文中的sfValidatorDoctrineUnique
$this->validatorSchema->setPostValidator(new sfValidatorAnd(array(
new sfValidatorDoctrineUnique(array('model' => 'Page', 'column' => array('url')), array('invalid' => 'This URL already exists.'))
)));
当我创建一条新记录时,验证器很有效。但是,在编辑现有记录时,由于它将自己检测为重复,所以会引发错误。换句话说,如果我编辑记录但不更改URL,则会引发重复错误。
这一定是一个普遍的问题,所以我想知道Symfony的处理方式是什么?基本上我希望它在保存时忽略自身(不存在重复),但仍然运行后验证器以确保不存在真正的重复。
汤姆,请让我知道你找到了解决办法,因为我有相同问题。谢谢。 – tipu 2011-04-18 20:59:43
我的解决方案发现:sfValidatorDoctrineUnique的第一个参数应该有一个键“primary_key”,值应该是表的主键。那么您需要确保您的表单中的名称与主键匹配。所以如果你正在编辑一个模型页面,其ID为3,你需要。最后我还将primary_key列放在我的表单中,所以$ this-> setValidator('id',new sfValidatorString(array('required'=> true)))。总而言之,3个文件的变化完成了工作。 – tipu 2011-04-18 21:56:17