简单的帖子验证器不想工作

时间:2012-01-12 15:52:29

标签: forms symfony1

我已经为客户注册制作了一个表单,但我无法使这个postvalidators工作。

//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才有效。当我提交具有两个不同值的表单时,例如,在密码和repassword字段上,表单已正确提交,并且不会引发错误。

有人有个主意吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我知道exaclty你的问题,每次你使用setPostValidator你都会覆盖其他人(那总是最后一个工作),我的建议是使用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函数将每个post验证器与逻辑“And”操作数连接起来。因此,如果所有这些都是真的,那么你的帖子验证器将返回true。