Symfony Choice断言消息覆盖

时间:2017-09-26 09:18:53

标签: php symfony validation assert

我在我的实体中有这个断言:

/**
 * @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中预期的那样工作?

2 个答案:

答案 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; 属性的名称是流派,但在表单类型上,您将其称为性别。 我想这只是错误的问题。 只需重命名属性而不是流派。