我对交响乐有点陌生。我有一个问题与实体和他的注释和链接的具体错误信息。下面,您可以看到实体属性和特定的注释。
/**
* @var float
*
* @ORM'Column(name="chest", type="float")
*
* @Assert'Type(type="float", message="The value {{ value }} is not a type {{ type }} valid.")
*
*/
private $chest;
如果我将这个字段作为文本字段添加到表单中,就会得到实体中指定的正确错误消息。(例如:值"222"不是有效的浮点类型)
$builder->add('chest', 'text')
但是如果我将这个字段添加为数字字段,我将得到一个通用的错误消息。(例如:此值无效)
$builder->add('chest', 'number')
我看到,对于这种表单字段,有invalid_message属性,我可以在其中放置特定的错误消息,它可以工作,但我不喜欢根据字段类型单独设置错误消息的方式。
也许我完全错了,我对这些有点困惑。
非常感谢您的帮助
Gilles
此类型约束检查您的属性是否为float值。
如果你使用文本类型,(如果你有一个基本的setter)"chest"属性将是一个字符串。所以它总是会在这个测试中失败。
如果使用数字类型,表单将尝试将提交的文本值转换为数字。当不可能时,您将获得您在"invalid_message"选项(或默认值)中设置的消息。
如果"chest"是严格的float,我建议你在表单中使用number类型。
或者你可以将类型约束" 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.
(之后需要清除缓存)
这可能是因为数据和表单字段类型都有单独的Constraint
。
既然你已经对数据本身设置了约束,我认为删除那些表单类型的约束是安全的。
你可能会做这样的事情(虽然,我从来没有尝试过):
$builder->add('chest', 'number', array('constraints': null))
这个工作吗?