【问题标题】:Don't show column name when validator returns an error验证器返回错误时不显示列名
【发布时间】:2011-09-07 10:12:35
【问题描述】:

我有以下代码:

$this->form->setValidators(array(
    'email'   => new sfValidatorAnd(
        array(
            new sfValidatorEmail(array(), array(
                'invalid' => 'Enter a valid email address.',)),
            new sfValidatorDoctrineUnique(array(
                'model'=>'Users',
                'column'=>'email',
                ), array(
                'invalid' => 'This email is already being used.',
                )),
        ),
        array(),
        array(
                'required' => 'Required',
        )
    ),
//...

并且当电子邮件不是唯一的时,它会返回以下错误:email: This email is already being used. 但我不希望在邮件前面出现email:
有没有办法可以停止显示列名?

我能得到一些帮助吗?

【问题讨论】:

    标签: symfony1 symfony-1.4 validation


    【解决方案1】:

    这是 sfValidatorDoctrineUnique 的一个特殊之处,因此可能需要测试多个列的唯一性。

    你必须重写 doClean() 方法来阻止这一行(在最后):

    throw new sfValidatorErrorSchema($this, array($columns[0] => $error));    
    

    更多信息:

    【讨论】:

    • 我用这个,当使用sfValidatorDoctrineUnique时它会显示列名
    • 是的——你是对的,这里的问题是由sfValidatorDoctrineUnique的doClean方法引起的:throw new sfValidatorErrorSchema($this, array($columns[0] => $error)); 恕我直言,唯一的解决方案是覆盖此方法。
    【解决方案2】:

    您可以将throw_global_error 选项传递给sfValidatorDoctrineUnique,以便抛出错误并且不显示<column>:

      new sfValidatorDoctrineUnique(
        array('throw_global_error' => true, 'column' => 'email'),
        array('invalid' => 'Custom message')
      )
    

    希望对你有帮助。

    最好的尊重。

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多