如何在第一次错误时停止字段验证?

时间:2017-01-28 14:04:51

标签: php symfony symfony-forms symfony-validator

我在Symfony 2.8中有一个表单,其中包含以下字段:

$builder->add('a', TextType::class, [
            'label' => '',
            'constraints' => [
                new NotBlank(
                    [
                        'message' => 'foo'
                    ]
                ),
                new Regex(
                    [
                        'pattern' => '/^\d+$/',
                        'message' => 'bar'
                    ]
                ),
                new GreaterThan(
                    [
                        'value' => 0,
                        'message' => 'empty'
                    ]
                )
            ]
]);

`

当字段值为空时,我们会从每个约束中收到错误消息。如何防止执行第一个约束失败后定义的约束?

2 个答案:

答案 0 :(得分:0)

我不知道您的问题是否有更直接的解决方案,但您可以使用callback验证该字段,并在第一次检查失败时添加错误消息。< / p>

答案 1 :(得分:0)

解决方案可能是使用不同的错误级别

http://symfony.com/doc/current/validation/severity.html

 new NotBlank(
                [
                    'message' => 'foo',
                    'payload' => 
                        [
                            'severity' => 'lv1'                  
                        ]
                ]
            ),
...

如果您设置了不同的级别(例如'lv1','lv2'),您只需在选择要显示的内容的错误上创建一个显示逻辑。

另一种方法是检查实体的每个属性,查找错误:

$errors = $this->get('validator')->validateProperty($entity, 'name of the property');
if (count($errors)) {
    // Show only the first error
}

还有其他方法可以实现这一目标,但您应该向我们提供有关代码逻辑的更多详细信息。