我已经为客户注册制作了一个表单,但我无法使这个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字段上,表单已正确提交,并且不会引发错误。
有人有个主意吗?
提前感谢您的帮助。
答案 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。