2017-09-26 57 views
0

我有我的实体内部的这一说法:Symfony的选择断言消息覆盖

/** 
* @Assert\Choice(choices = {"fiction", "non-fiction"}, message = "Choose a valid genre.") 
*/ 
protected $genre; 

和文档说的消息参数:

类型:字符串

默认:您选择的值不是有效的选择。

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

而在我的表单类型,我有:

->add('genre', ChoiceType::class, [ 
    'multiple' => false, 
]) 

但是,当性别字段的值是不是选择(“虚构”有效阵列中,“非小说“),消息错误是”此值无效“。

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

我知道我可以用“invalid_message”参数, 重写它的形式类型,但我想,如果有这个解释?

为什么“消息”参数失败/选择不起作用? 我该如何使它在Symfony doc中的预期工作?

+0

尝试设置多个为真,因为错误说:“这是,如果多个选项被设置为false,您将收到消息......”只是一个简单的一句话 – Dija

+0

据我了解,我们设置了消息在Assert/Choice **消息中**属性是我们得到的消息,如果multiple设置为false,就像我的例子。我还与多个试图真实的,但消息始终是“**此值是无效的。**” –

回答

0

在文档中,没有说明你可以在这个地方传递可能的值。 您需要在类中创建一个函数(例如“getGender()”),该函数返回具有有效值的数组。 然后,断言,你可以调用这个函数是这样的:

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

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

而且要小心,你用的,而不是在注释“回调”,“选择”)

+0

您好,感谢您的答复,但在doc其指定为通过选择选项直接传递的选择(见**基本用法**​​段落)。但我也尝试过使用回调函数,正如我期望的那样,我有相同的行为:消息验证不是我明确设置的。 –

0

我的第一句话是那 /** * @Assert\Choice(choices = {"fiction", "non-fiction"}, message = "Choose a valid genre.") */ protected $genre; 属性的名称是流派,但在你称之为性别的表单类型上。 我想这只是错误的问题。 只需重命名属性性别而不是流派。

+0

对不起,我的问题中有一个错字错误。在我的代码它的路线相同的名称。我编辑了第一篇文章。谢谢。 –