逻辑验证Symfony表单

时间:2010-01-13 19:17:11

标签: validation forms symfony1

使用Symfony1,如何在表单中填写两个字段中的一个?它们是但不是必需的字段,但我需要用户填写两个字段之一。这是我到目前为止的尝试,但它不起作用:

$this->setValidator('phone', new sfValidatorAnd(
  array(
    new sfValidatorSchemaCompare('email', '==', ''),
    new sfValidatorSchemaCompare('phone', '==', ''),
  ),
  array(),
  array(
    'invalid' => 'El e-mail no tiene un formato correcto',
    'required' => 'Campo obligatorio',
  )
));

2 个答案:

答案 0 :(得分:3)

比较两个单独的字段时,您应该使用全局验证器:http://www.symfony-project.org/forms/1_2/en/02-Form-Validation#chapter_02_global_validators。发生错误时,您当前的方法始终将电话字段标记为无效。此外,当值有效时,您提供给验证器的条件应该返回true,因此在您的情况下,您应该使用带有!=比较的ValidatorOr:

$this->validatorSchema->setPostValidator(new sfValidatorOr(
  array(
    new sfValidatorSchemaCompare('email', '!=', ''),
    new sfValidatorSchemaCompare('phone', '!=', ''),
  ),
  array(),
  array('invalid' => 'Campo obligatorio')
));

希望有所帮助。

答案 1 :(得分:0)

我不确定是否有更好的方法,但你可以使用sfValidatorOr检查其中一个字段是否有效(即设置为true)。

有关sfValidatorOr的更多信息: http://www.symfony-project.org/forms/1_2/en/B-Validators#chapter_b_sub_sfvalidatoror