2012-01-12 39 views
0

我已經爲客戶端註冊做了一個表單,但是我無法使這個驗證器工作。簡單的驗證器不想工作

//POST-VALIDATORS 
    $this->validatorSchema->setPostValidator(
      new sfValidatorSchemaCompare(
         'email', sfValidatorSchemaCompare::EQUAL, 'reemail', 
         array(), 
         array('invalid' => "Les adresses mails sont différentes !") 
    )); 

    $this->validatorSchema->setPostValidator(
      new sfValidatorSchemaCompare(
         'password', sfValidatorSchemaCompare::EQUAL, 'repassword', 
         array(), 
         array('invalid' => "Les mots de passe sont différents !") 
    )); 

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

奇怪的是:只有使用我的custum函數sfValidatorCallback工作。當我用兩個不同的值提交表單時,例如在密碼和重新輸入密碼字段時,表單被正確提交併且沒有錯誤發生。

有人知道了嗎?

在此先感謝您的幫助。

回答

1

我知道exaclty你的問題,每次使用setPostValidator你將覆蓋其他(那WY總是最後一個工作)的時間,我的建議是使用mergePostValidators,代碼應該是這樣的:

$this->mergePostValidator(
      new sfValidatorSchemaCompare(
         'email', sfValidatorSchemaCompare::EQUAL, 'reemail', 
         array(), 
         array('invalid' => "Les adresses mails sont différentes !") 
    )); 
$this->mergePostValidator(
     new sfValidatorSchemaCompare(
        'password', sfValidatorSchemaCompare::EQUAL, 'repassword', 
        array(), 
        array('invalid' => "Les mots de passe sont différents !") 
)); 

$this->mergePostValidator(new sfValidatorCallback(
     array('callback' => array($this,'checkEmailAvailability')) 
)); 

mergePostValidator函數使用邏輯「And」操作數連接每個驗證器。因此,如果所有這些都是正確的,那麼您的發佈驗證器將返回true。

+0

噢好吧,那很奇怪!所以我想我可以這樣做: – h1ghfive 2012-01-12 16:35:32

+0

$ this-> validatorSchema-> setPostValidator(new sfValidatorAnd(array( new sfValidatorSchemaCompare( – h1ghfive 2012-01-12 16:35:49

+0

POsting code sucks in comment。無論如何非常感謝您的解釋:) – h1ghfive 2012-01-12 16:36:28