Validation 逻辑验证符号形式

Validation 逻辑验证符号形式,validation,forms,symfony1,Validation,Forms,Symfony1,使用Symfony1,如何验证表单中填写的两个字段之一?它们是但不是必填字段,但我需要用户填写两个字段中的一个。这是我到目前为止的尝试,但不起作用: $this->setValidator('phone', new sfValidatorAnd( array( new sfValidatorSchemaCompare('email', '==', ''), new sfValidatorSchemaCompare('phone', '==', ''), ), a

使用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',
  )
));

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

有关SFValidator的更多信息:

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

有关SFValidator的更多信息:

在比较两个单独的字段时,应使用全局验证器:。当发生错误时,您当前的方法将始终将电话字段标记为无效。此外,当值有效时,您提供给验证器的条件应该返回true,因此在您的情况下,您应该使用带有!=类似这样的比较:

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

希望对您有所帮助。

在比较两个单独的字段时,您应该使用全局验证器:。当发生错误时,您当前的方法将始终将电话字段标记为无效。此外,当值有效时,您提供给验证器的条件应该返回true,因此在您的情况下,您应该使用带有!=类似这样的比较:

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

希望这能有所帮助。

我尝试过,但从未出错。不创建寄存器,但也不显示错误。如何显示错误?谢谢您可以使用$form->hasGlobalErrors()检查并回显$form->renderGlobalErrors()打印。如果您想进行自定义渲染,您可以通过$form->getGlobalErrors()迭代所有全局错误的名称/消息对。我尝试过,但它从未引发错误。不创建寄存器,但也不显示错误。如何显示错误?谢谢您可以使用$form->hasGlobalErrors()检查并回显$form->renderGlobalErrors()打印。如果要进行自定义渲染,还可以通过$form->getGlobalErrors()迭代所有全局错误的名称/消息对。