我在我的实体中有这个断言:
/**
* @Assert\Choice(choices = {"fiction", "non-fiction"}, message = "Choose a valid genre.")
*/
protected $genre;
文档说明消息参数:
输入:字符串
默认:您选择的值不是有效选择。
如果多个选项设置为false ,那么您将收到的消息,并且基础值不在有效的选择数组中。
在我的表单类型中,我有:
->add('genre', ChoiceType::class, [
'multiple' => false,
])
但是,当性别字段的值不在有效的选择数组(“小说”,“非小说”)中时,消息错误为“此值无效。 “
它不是默认值,也不是我在实体中设置的值。
我知道我可以在表单类型中使用“ invalid_message ”参数覆盖它, 但是如果有解释的话我想呢?
为什么Assert / Choice的“消息”参数不起作用? 如何让它像symfony doc中预期的那样工作?
答案 0 :(得分:0)
在文档中,您可以在此处传递可能的值,但这并不明确。 您需要在类中创建一个函数(例如" getGender()"),它返回一个具有有效值的数组。 然后,使用断言,您可以像这样调用此函数:
class Author
{
/**
* @Assert\Choice(callback = "getGender", message = "Choose a valid genre.")
*/
protected $genre;
public function getGender() {
return array("fiction", "non-fiction");
}
}
小心点,你用了#34;选择"而不是"回调"在注释中;)
答案 1 :(得分:0)
我的第一句话就是那样
/**
* @Assert\Choice(choices = {"fiction", "non-fiction"}, message = "Choose a valid genre.")
*/
protected $genre;
属性的名称是流派,但在表单类型上,您将其称为性别。
我想这只是错误的问题。
只需重命名属性而不是流派。