我在兩個單獨的上下文中使用表單類:既創建一個新記錄,也編輯該記錄。我已經設置了後驗證器,如下所示,以檢查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