【问题标题】:Symfony form price field - custom assert with messageSymfony 表单价格字段 - 带有消息的自定义断言
【发布时间】:2016-02-18 22:04:54
【问题描述】:

默认情况下消息:此值无效。 不够。我正在将@Assert 添加到我的实体中的每个属性以进行更具体的验证。

我在表格顶部全局显示错误 - 而不是单独显示 - 以防它在本次讨论的上下文中很重要。

/**
 * @ORM\Column(type="decimal", nullable=false, precision=10, scale=2)
 * @Assert\Type(message="list price must be a numeric value", type="decimal")
 * @Assert\NotBlank(message="list price cannot be empty")
 * @Assert\GreaterThanOrEqual(message="list price must be no less than zero", value = 0)
 */

private $listPrice;

这是我目前所拥有的,但当我输入值“D44.33”时,表单仍然无效

如何覆盖默认的“类型”验证器?请注意像 GreaterThanOrEqual 这样的其他验证器按预期工作 - 但对于我来说,我无法让“类型”工作???

【问题讨论】:

  • D44.33 不是十进制值。如果您想要小数点以字母 D 开头的格式,您应该编写自己的自定义验证约束。
  • 这就是重点...我希望验证失败并说明失败的原因
  • 但是我得到了一般性消息,这意味着什么......甚至不包括失败的字段名称......在全局显示错误的情况下这是无用的:)
  • 然后您在表单的其他地方收到错误,因为错误类型的默认值是This value should be of type {{ type }}.
  • 我认为可能是这种情况,但是当我调查错误时,我确定(不是在工作中确认)它说有问题的字段..有任何调试建议吗?

标签: forms validation symfony


【解决方案1】:

decimal 类型在 Symfony 中不是有效类型,因此它可能正在寻找自定义的 decimal 类型并尝试转换数据并失败(这与您收到的错误消息的类型一致)。

允许的类型列表在这里:

http://symfony.com/doc/current/reference/constraints/Type.html#reference-constraint-type-type

尝试改用这个:

@Assert\Type(type="float", message="List price must be a numeric value")

【讨论】:

    【解决方案2】:

    @Jason Roman - 再次感谢您的帮助

    我遇到的问题通过使用 "invalid_message" 解决了,如下所示:

    ->add('listPrice', null, ['error_bubbling' => true, 'invalid_message' => '{{ value }} is not a valid list price'])
    

    【讨论】:

    • 很高兴你把这一切都理顺了!您仍然应该将 Type 断言从 decimal 更改为 :)
    • 我完全放弃了它 - 由于较低级别的默认类型验证,似乎甚至没有被调用???
    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多