0

我在 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'
                    ]
                )
            ]
]);

`

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

4

2 回答 2

0

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

于 2017-01-28T14:15:58.077 回答
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
}

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

于 2017-01-28T18:36:11.373 回答