我在stackoverflow中创建了这个:
$this->validatorSchema->setPostValidator(new sfValidatorOr(
array(
new sfValidatorSchemaCompare('email', '!=', ''),
new sfValidatorSchemaCompare('phone', '!=', ''),
),
array(),
array('invalid' => 'Campo obligatorio')
));
我如何为这3个值添加?
$this->validatorSchema->setPostValidator(new sfValidatorOr(
array(
new sfValidatorSchemaCompare('email', '!=', ''),
new sfValidatorSchemaCompare('phone', '!=', ''),
new sfValidatorSchemaCompare('yahooid', '!=', ''),
),
array(),
array('invalid' => 'Campo obligatorio')
));
这不起作用。然后总是需要yahooid ...例如,如果我输入电子邮件和电话,那么有效是假的,但如果我输入yahooid,那么这是可以的。
答案 0 :(得分:0)
首先,sfValidatorSchemaCompare()用于比较两个字段,而不是字段的值。改为使用sfValidatorString。
根据您的需要,sfValidatorCallback是我最好的镜头:
$this->validatorSchema->setPostValidator(
new sfValidatorCallback(array('callback' => array($this, 'fillAtLeastOne')))
);
然后
public function fillAtLeastOne($validator, $values)
{
if (!$values['email']) && !$values['phone'] && !$values['yahooid'])
{
// All the field are empty / null, throw an error !
throw new sfValidatorError($validator, 'Campo obligatorio.');
}
// is correct, return the clean values
return $values;
}
$ values参数包含表单的所有值,因此使用validatorCallback验证任何内容都很容易。