Php Symfony选择断言消息覆盖

Php Symfony选择断言消息覆盖,php,symfony,validation,assert,Php,Symfony,Validation,Assert,我在我的实体中有这样的断言: /** * @Assert\Choice(choices = {"fiction", "non-fiction"}, message = "Choose a valid genre.") */ protected $genre; 文档中说明了消息参数: 类型:字符串 默认值:选择的值无效 如果多重选项设置为false,并且基础值不在有效的选项数组中,您将收到此消息 在我的表格类型中,我有: ->

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

/**
 * @Assert\Choice(choices = {"fiction", "non-fiction"}, message = "Choose a valid genre.")
 */
protected $genre;
文档中说明了消息参数:

类型:字符串

默认值:选择的值无效

如果多重选项设置为false,并且基础值不在有效的选项数组中,您将收到此消息

在我的表格类型中,我有:

->add('genre', ChoiceType::class, [
    'multiple' => false,
])
但是,当性别字段的值不在有效的选项数组(“虚构”、“非虚构”)中时,消息错误为“此值无效”

它不是默认值,也不是我在实体中设置的值

我知道我可以用“无效消息””参数在表单类型中重写它, 但我想问一下,是否对此有解释

为什么断言/选择的“message”参数不起作用?
我如何才能使它像在symfony中预期的那样工作?

在文档中,您可以在此处传递可能的值,这并不特别。 您需要在类(例如“getGender()”)中创建一个函数,该函数返回一个包含有效值的数组。 然后,使用assert,您可以如下方式调用此函数:

class Author
{
    /**
     * @Assert\Choice(callback = "getGender", message = "Choose a valid genre.")
     */
    protected $genre;

    public function getGender() {
        return array("fiction", "non-fiction");
    }
}

注意,您在注释中使用了“选择”而不是“回调;”

在文档中,没有规定您可以在此处传递可能的值。 您需要在类(例如“getGender()”)中创建一个函数,该函数返回一个包含有效值的数组。 然后,使用assert,您可以如下方式调用此函数:

class Author
{
    /**
     * @Assert\Choice(callback = "getGender", message = "Choose a valid genre.")
     */
    protected $genre;

    public function getGender() {
        return array("fiction", "non-fiction");
    }
}

注意,您在注释中使用了“选择”而不是“回调;”

我的第一句话是
/**
*@Assert\Choice(choices={“虚构”、“非虚构”},message=“选择有效类型。”)
*/
受保护的类型
属性的名称是流派,但在表单类型上,您称之为性别。
我想这只是打字错误的问题。

只需重命名属性性别而不是类型。

我的第一句话是
/**
*@Assert\Choice(choices={“虚构”、“非虚构”},message=“选择有效类型。”)
*/
受保护的类型
属性的名称是流派,但在表单类型上,您称之为性别。
我想这只是打字错误的问题。

只需重新命名属性性别而不是类型。

对不起,我的问题中有一个打字错误。在我的代码中,它当然是同一个名字。我编辑了第一篇文章。谢谢。对不起,我的问题是打字错误。在我的代码中,它当然是同一个名字。我编辑了第一篇文章。谢谢。尝试将multiple设置为true,因为错误显示“这是如果multiple选项设置为false,您将收到的消息…”只是一个简单的标记。据我所知,如果multiple设置为false,我们在Assert/Choice message属性中设置的消息就是我们收到的消息,正如我的示例中所示。我也尝试将multiple设置为true,但消息始终是“此值无效”。尝试将multiple设置为true,因为错误显示“如果multiple选项设置为false,您将收到此消息…”我理解这只是一个简单的注释,我们在Assert/Choice消息属性中设置的消息是我们在multiple设置为false时得到的消息,就像我的示例中一样。我也尝试将multiple设置为true,但消息总是“This value is not valid.”您好,谢谢您的回复,但在文档中,它指定通过选项直接传递选项(请参见基本用法段落)。但我也尝试了回调函数,正如我所料,我有相同的行为:消息验证不是我显式设置的。您好,感谢您的响应,但在文档中,它指定通过选项直接传递选项(请参见基本用法段落)。但我也尝试了回调函数,正如我所料,我有相同的行为:消息验证不是我显式设置的。