【问题标题】:Symfony Validation Error Message for Missing Required Form Field缺少必填表单字段的 Symfony 验证错误消息
【发布时间】:2023-03-22 14:08:01
【问题描述】:

我有一个工作表单,它有一个必填字段,不能为空:

/**
 * @Assert\NotBlank
 */
private $field1 = '';

如果我在请求中指定此字段,但将该字段留空,我会收到以下响应:

{
    "code":400,
    "message":"Validation Failed",
    "errors":{
        "children":{
            "field1":{
                "errors":["Field should not be blank"]
            }
        }
    }
}

如果我在请求中省略此字段,我会收到以下响应:

{
    "code":400,
    "message":"Validation Failed",
    "errors":{
        "errors":["Field should not be blank"]
    }
}

是否有一些内置的 Symfony 逻辑可以用来使第二个示例与第一个示例匹配?

[编辑] 使用 Symfony 2.5 - 现在更新到 Symfony 2.8.3,同样的问题。

【问题讨论】:

  • 也许您正在寻找NotNull 而不是NotBlank
  • @walkingRed - 试过了。没有骰子。
  • 最终目标是什么?您需要确定缺少哪个字段并触发错误条件?
  • 最终目标是我想知道为什么默认行为是在表单级别归因于一般的“字段缺失”错误,闻起来像一个错误。
  • 你试过$buider->add('field1', YourFormType::class, array('error_bubbling' => true))吗?

标签: php forms validation symfony


【解决方案1】:

当表单对象本身未显示该字段时,可能会发生此行为。在这种情况下,违规映射器无法将验证错误映射到其中一个字段。请检查该字段是否显示在表单对象中。

【讨论】:

  • 该字段存在于表单对象中,但不存在于 POST 数据中。对我来说,如果用户省略了必填字段,默认情况下应该给他们一个完全没有帮助的错误消息,这似乎是不合理的。
  • 我无法重现此行为。但是,如果我从表单对象中删除该字段,我会得到与您描述的相同的结果。
  • 所以我现在意识到我正在使用 FOSBundle 进行表单和响应处理,我正在做更多分析以找出哪个组件不正常。
  • 所以我发现另一个开发人员添加了一个EventSubscriber,当它们从请求数据中省略时,它正在从表单中删除字段,以便不覆盖模型中的默认值,而不是只需将默认值添加到提交的数据以允许将验证应用于默认数据。 叹息
【解决方案2】:

您在处理请求后验证实体。如果您将具有空 'field1' 的实体传递给验证器,则此对象始终无效。这看起来像是全局级别的验证错误。

【讨论】:

  • 如果我选择不在请求中传递字段,则使用默认值 - 就像在 HTTP PATCH 请求中一样。如果该字段无效,则表单应显示 which 字段无效,而不仅仅是让您猜测缺少哪个字段。
  • 验证默认值应该是成功的。验证空属性会在属性级别引发验证错误。调试'$form->getErrors'。它看起来像是全局级别的错误。
  • 调试“$form”对象。会有一个目标约束。
猜你喜欢
  • 2013-01-31
  • 2022-06-30
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
相关资源
最近更新 更多