【问题标题】:How to stop field validation on first error?如何在第一个错误时停止字段验证?
【发布时间】:2017-01-28 14:04:50
【问题描述】:

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

`

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

【问题讨论】:

    标签: php symfony symfony-forms symfony-validator


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-14
        • 2016-07-12
        • 2018-02-11
        • 1970-01-01
        • 1970-01-01
        • 2022-10-18
        • 1970-01-01
        • 2014-12-16
        相关资源
        最近更新 更多