【问题标题】:symfony assert ignores custom messagesymfony 断言忽略自定义消息
【发布时间】:2017-01-29 14:50:59
【问题描述】:

我在实体中有这段代码:

/**
     * @Assert\Type(
     *     type="real",
     *     message="Price for vehicle service must be real number."
     * )
     *
     * @ORM\Column(name="min_price", type="float")
     */
    protected $minPrice;

但是如果在这个表单域中输入非整数值,Symfony 返回默认的区域设置错误消息(在我的例子中是Значение недопустимо),而不是“车辆服务价格必须是实数。”。这很不舒服,因为错误地没有指定字段名称,如果有复杂的表单,需要时间找到该字段。

也许作为解决方案可以是回调验证,但在我的主观意见中它不会出现,因为用户只能看到语言环境默认消息。当我试图避免添加 @Assert\Regex(pattern="/+d/", message="custom message") 时,我还是看到了语言环境默认消息。

Symfony Profiler 显示以下错误:

Symfony\Component\Validator\ConstraintViolation
Object(Symfony\Component\Form\Form).children[vehiclePriceOutOfTown].children[minPrice] = g
Caused by:
Symfony\Component\Form\Exception\TransformationFailedException
Unable to reverse value for property path "minPrice": Number parsing failed: U_PARSE_ERROR
Caused by:
Symfony\Component\Form\Exception\TransformationFailedException
Number parsing failed: U_PARSE_ERROR

【问题讨论】:

    标签: php symfony doctrine


    【解决方案1】:

    您看到的异常是在转换用户输入的过程中触发的。这发生在应用实际验证逻辑之前(这作为POST_SUBMIT 事件的一部分发生)。如果您想自定义在抛出 TransformationFailedException 时显示的错误消息,您可以将 invalid_message option 用于特定的表单类型。

    【讨论】:

    • 谢谢您,只需添加“invalid_message”即可解决问题。
    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2018-03-07
    相关资源
    最近更新 更多