【问题标题】:Symfony Choice assertion message overrideSymfony Choice 断言消息覆盖
【发布时间】:2018-03-07 10:36:30
【问题描述】:

我的实体中有这个断言:

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

文档中提到了 message 参数:

类型:字符串

默认值:您选择的值无效。

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

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

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

但是,当 gender 字段的值不在有效的选项数组(“小说”、“非小说”)中时,消息错误为“此值无效。 "

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

我知道我可以在表单类型中使用“invalid_message”参数覆盖它, 但我想如果对此有解释?

为什么 Assert/Choice 的“message”参数不起作用? 我怎样才能让它像 symfony doc 中预期的那样工作?

【问题讨论】:

  • 尝试将multiple设置为true,因为错误提示“这是如果multiple选项设置为false时您将收到的消息......”只是一个简单的备注
  • 据我了解,我们在 Assert/Choice message 属性中设置的消息是如果将多个设置为 false 时我们收到的消息,就像在我的示例中一样。我也尝试将多个设置为 true,但消息始终是“此值无效。

标签: php symfony validation assert


【解决方案1】:

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

【讨论】:

  • 对不起,这是我的问题中的拼写错误。在我的代码中,它当然是同名的。我编辑了第一篇文章。谢谢。
【解决方案2】:

在文档中,并未指定您可以在此位置传递可能的值。 您需要在类中创建一个函数(例如“getGender()”),该函数返回一个包含有效值的数组。 然后,使用断言,您可以像这样调用此函数:

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

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

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

【讨论】:

  • 您好,感谢您的回复,但在文档中指定直接通过选择选项传递选择(请参阅基本用法段落)。但我也尝试了回调函数,正如我所料,我有相同的行为:消息验证不是我明确设置的。
猜你喜欢
  • 1970-01-01
  • 2015-02-08
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2016-09-13
相关资源
最近更新 更多