Symfony表单验证问题

3

我无法确定以下Symfony 1.4表单验证中可能存在的错误。基本上,我只想让所有四个条件都得到正确考虑(必填、最小长度、最大长度、正则表达式)。它实际上是可行的,但对于“必填”条件,它未能显示我的自定义错误消息,而只是显示“必填”。有没有办法显示我的错误信息?

'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).')
        ),
)),

还有一件事,如果我移除正则表达式验证器并将其转换为普通的单行字符串验证器,我的自定义错误消息就会显示出来了!?

有人知道原因吗?

提前感谢。

1个回答

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.')),

这对我很有帮助,我希望它也能帮到你。


Darmen,非常感谢!在花费了太多时间尝试弄清楚之后,我用您的解决方案使它工作了。您上面的代码给了我一个错误,所以我用'array()'替换了'NULL',这样就解决了错误……这也意味着sfValidatorString中的第一个“required”条款可以被删除。再次感谢。 - Tom
@Tom,不用谢。我为那些未来会遇到相同问题的用户修复了答案。 - Darmen Amanbay
不确定您是否有意这样做,但[A-z0-9]将匹配您可能不想要的字符(在“Z”和“a”之间为“[”,“\”,“]”,“^”,“_”)。我随机尝试了其中一个并感到惊讶。 - Tool

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接