2010-11-28 106 views
2

我正在使用Symfony 1.4和Doctrine。 我有一個表格,有六個字段:名稱,父母1,父母2,父母3,父母4,父母5 一旦表單提交我想檢查數據庫的兩件事情: 1.名稱字段是唯一的 2.那parent1,parent2,parent3,parent4和parent5的組合不在數據庫中。這些值都是整數(來自相關表的主鍵),有些字段留空爲0.它們將根據用戶輸入的順序進入數據庫,所以我不關心順序,但會喜歡在表單保存前確保組合本身不存在。Symfony 1.4在保存前根據數據庫條目檢查表單值

任何幫助將不勝感激!

回答

4

使用sfValidatorCallback。在你的窗體類,添加以下的設置()函數:

$this->validatorSchema->setPostValidator(new sfValidatorCallback(array('callback' => array($this, 'YOURCALLBACKFUNCTIONNAME')))); 

然後,您可以在同一文件中創建此,回調函數:

public function YOURCALLBACKFUNCTIONNAME($validator, $values) { 
    //Validate form here 
    //Access form items using $values['FORMNAME']; 
    //$error = new sfValidatorError($validator, 'A Error Message.'); 
    //$es = new sfValidatorErrorSchema($validator, array('FORMITEM' => $error); 
    //throw $es; 
    } 
+0

哇 - 我一直在爲此工作好幾天!非常感謝Jon,它已經運行起來了! – Lauren 2010-11-28 20:05:20

+0

np,很高興你能工作。 – jgallant 2010-11-28 22:28:22

2

其實是有一種學說驗證器專門爲此,sfValidatorDoctrineUnique。在您的形式,嘗試:

public function configure() 
{ 
    parent::configure(); 
    $this->mergePostValidator(new sfValidatorDoctrineUnique(array(
     'model' => 'MyModelName', 
     'column' => array('name') 
))); 
    $this->mergePostValidator(new sfValidatorDoctrineUnique(array(
     'model' => 'MyModelName', 
     'column' => array('parent1', 'parent2', 'parent3', 'parent4', 'parent5') 
))); 
} 
0

我知道你的問題是關於教義,而是爲那些誰正在尋找這個答案,並使用Proepl,對於這個波輪驗證:

另一個有用的模型相關的驗證器是sfValidatorPropelUnique驗證器,該驗證器檢查通過表單輸入的新值是否與具有唯一索引的數據庫列中的現有值衝突。例如,兩個用戶不能具有相同的登錄,所以編輯與形式的用戶對象時,必須在此列添加sfValidatorPropelUnique驗證:

//推進唯一驗證$形式 - > setValidator將('暱稱',new sfValidatorPropelUnique(array('model'=>'User','column'=> 'login')));

相關問題