ValidatorOR Symfony中的三个值

时间:2011-07-15 07:58:31

标签: php symfony1

我在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,那么这是可以的。

1 个答案:

答案 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验证任何内容都很容易。