2010-01-23 116 views
3

我无法看到我在做下面的Symfony 1.4表单验证时可能会做错什么。基本上,我只想要正确地考虑所有四个条件(要求,最小长度,最大长度,正则表达式)。它实际上是可行的,但对于'必需'条件,它不能显示我的自定义错误信息,而只是说“必需”。有没有办法让我的错误信息显示?Symfony表单验证问题

'username' => new sfValidatorAnd(array(
    new sfValidatorString(
     array('required' => true, 'min_length' => 4, 'max_length' => 20), 
     array('required' => 'Please enter a username.', 'min_length' => 'Your username must have at least 4 characters.', 'max_length' => 'Your username cannot be longer than 20 characters.') 
     ), 
    new sfValidatorRegex(
     array('pattern' => '/^[A-z0-9]*$/i'), 
     array('invalid' => 'Your username can only have letters (A-Z) or numbers (0-9).') 
     ), 
)), 

一个额外的东西,如果我删除了正则表达式验证,只是把它变成一个正常的单行字符串验证,我的自定义错误消息确实显示!?

有人吗?

在此先感谢。

回答

6

我已经注意到了同样的问题,大约两个星期前,找到了解决办法 - 只要将你的消息sfValidatorAnd声明:

'username' => new sfValidatorAnd(array(
    new sfValidatorString(
     array('required' => true, 'min_length' => 4, 'max_length' => 20), 
     array('min_length' => 'Your username must have at least 4 characters.', 'max_length' => 'Your username cannot be longer than 20 characters.') 
     ), 
    new sfValidatorRegex(
     array('pattern' => '/^[A-z0-9]*$/i'), 
     array('invalid' => 'Your username can only have letters (A-Z) or numbers (0-9).') 
     ), 
), array(), array('required' => 'Please enter a username.')), 

,帮助我,我希望它可以帮助你。

+0

达门,非常感谢!在花费太多时间试图弄清楚之后,才能使用您的解决方案。上面的代码给了我一个错误,所以我用'array()'替换了'NULL',它清除了错误....这也意味着可以删除sfValidatorString中的第一个'required'子句。再次感谢。 – Tom 2010-01-23 10:15:28

+0

@Tom,不客气。我为将来遇到同样问题的用户解决了问题。 – Darmen 2010-01-23 10:24:51

+0

不确定你是否故意这样做,但[A-z0-9]会匹配你可能不想要的字符('Z'和'a'之间是'[','',']','^ ','_')。随机尝试其中一个并感到惊讶。 – Tool 2011-07-18 02:23:57