Symfony验证错误消息:缺少必填表单字段

5

我有一个可用的表单,其中有一个必填字段需要非空:

/**
 * @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 - Tomasz Ferfecki
@walkingRed - 尝试过了,不行。 - StampyCode
最终目标是什么?您需要确定哪个字段缺失并触发了错误条件? - miken32
最终目标是我想知道为什么默认行为是在表单级别上归因于通用的“字段缺失”错误,听起来就像是一个 bug。 - StampyCode
如果我从请求中省略了这个字段,那么我是如何省略它的?你必须从表单对象本身中删除它。如果你只是从请求对象中删除该字段,那么Symfony会抛出错误。 - sonam
显示剩余3条评论
2个回答

3

当表单对象本身中没有呈现字段时,就会出现这种行为。在这种情况下,违规映射器无法将验证错误映射到其中一个字段。请检查该字段是否在表单对象中呈现。


该字段存在于表单对象中,但在POST数据中不存在。如果用户省略了必填字段,他们默认应该得到一个完全没有帮助的错误消息,这对我来说似乎是不合理的。 - StampyCode
我无法重现这种行为。但是如果我从表单对象中删除该字段,我得到了你描述的相同结果。 - Sergey Fedotov
所以我现在意识到我正在使用FOSBundle进行表单和响应处理,我正在进行更多的分析,找出哪个组件没有正常工作。 - StampyCode
所以我发现另一个开发人员添加了一个EventSubscriber,当请求数据中省略字段时,它会从表单中删除这些字段,以避免覆盖模型中的默认值,而不是仅向提交的数据添加默认值以允许对默认数据应用验证。 - StampyCode

0

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


如果我选择在请求中不传递字段,则将使用默认值 - 就像在HTTP PATCH请求中一样。如果字段无效,则表单应该指出哪个字段无效,而不是让你猜测缺少哪个字段。 - StampyCode
验证默认值应该成功。在空属性上进行验证会在属性级别上引发验证错误。调试 '$form->getErrors'。它看起来像是全局级别的错误。 - John Smith
调试 '$form' 对象。会有一个目标约束。 - John Smith

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