symfony 浮点型错误信息

symfony float type error message

我对 symfony 有点陌生。我有一个实体及其注释和链接的特定错误消息的问题。下面,你可以看到实体属性和具体的注解。

/**
 * @var float
 *
 * @ORM\Column(name="chest", type="float")
 *
 * @Assert\Type(type="float", message="The value {{ value }} is not a type {{ type }} valid.")
 *
 */
private $chest;

如果我将此字段作为文本字段添加到我的表单中,我会收到实体中指定的正确错误消息。(ex de msg:值“222”不是有效的浮点类型)

$builder->add('chest', 'text')

但是如果我将此字段添加为数字字段,我会收到一般错误消息。 (例如:此值无效)

$builder->add('chest', 'number')

我看到,对于这种表单字段,有 invalid_message 属性,我可以在其中放置我的特定错误消息并且它有效,但我不喜欢分开设置错误的方式消息取决于字段类型。

也许我完全错了,我对这些有点困惑。

非常感谢您的帮助

吉尔斯

这可能是因为数据和表单字段类型都有单独的Constraint

既然你已经对数据本身设置了约束,我认为删除那些表单类型是安全的。

你可能会这样做(尽管我从未尝试过):

$builder->add('chest', 'number', array('constraints': null))

这个有用吗?

此类型约束检查您的 属性 是否为 float 值。

如果您使用文本类型,(如果您有基本的 setter)"chest" 属性 将是一个字符串。所以它总是会在这个测试中失败。

如果您使用数字类型,表单会尝试将提交的文本值转换为数字。如果不可能,您将收到您在 "invalid_message" 选项(或默认值)中设置的消息。

如果 "chest" 是严格的浮点数,我建议您在表单中使用数字类型。

或者您可以将类型约束 "type" 选项设置为 "numeric"。它接受数字格式的字符串值。参见:http://php.net/manual/en/function.is-numeric.php

希望对您有所帮助! :)

更新

如果我遇到这样的问题,我会将错误消息组织到验证器的语言文件中。

在实体中:

/**
 * @var float
 *
 * @ORM\Column(name="chest", type="float")
 *
 * @Assert\Type(type="float", message="chest.invalid")
 */
private $chest;

在表格中输入:

$builder->add('chest', 'number', array(
    "invalid_message" => "chest.invalid",
    "invalid_message_parameters" => array(
        "{{ type }}" => "float"
    )
));

在验证语言文件中:

# app/Resources/translations/validators.en.yml

chest.invalid: The value {{ value }} is not a type {{ type }} valid.

(之后需要清缓存)