【问题标题】:Symfony form error message parameters usageSymfony 表单错误信息参数用法
【发布时间】:2016-02-08 14:09:03
【问题描述】:

Symfony 表单错误中消息参数数组的用途是什么?

例如,我有以下情况:在一个表单上,我有一个订阅者,在该订阅者中,根据用户提供的信息,一个 API 可能会被调用,并且一些额外的错误可能会添加到 Symfony 表单中。

因此,当发生错误时,我会在字段上添加一个新错误:

$myForm->get('name')->addError(
    new FormError('name.api_invalid', null, array('{{ api_name }}' => $someValue))
);

其中 'name.api_invalid' 在 message.en.yml 中定义为

name.api_invalid: "The API says the name is actually {{ api_name }}. Please fix before proceeding."

在翻译消息时,不会替换“参数”。

这不是表单错误参数应该如何工作的吗?

注意:我可以使用

$myForm->get('name')->addError(
    new FormError(
        $this->translator->trans('name.api_invalid', array('{{ api_name }}' => $someValue))
    )
);

但我真的对那些错误参数很好奇。

谢谢!

【问题讨论】:

  • 不知道这是否会在我的脑海中发挥作用,但我建议将{{ api_name }} 替换为%api_name%,它更类似于Symfony 约定和参数的使用。您使用该翻译消息的方式看起来像一个 Twig 变量,但实际上并非如此。
  • @JasonRoman 嗯...我选择了{{ api_name }},因为这也是在 Symfony 约束消息中使用变量的方式 (symfony.com/doc/current/reference/constraints/Length.html)。尝试使用 % 代替,但仍然没有运气,尽管如此,最后这只是一个标记,所以无论每个开发人员喜欢什么语法,它都应该工作......但它没有:)

标签: php forms symfony symfony-forms


【解决方案1】:

您正在查看的行为是changed in Symfony 2.2

翻译验证错误现在是可选的。如果您愿意,您仍然可以手动执行此操作,或者您可以简化模板以简单地输出已翻译的消息。

如果您查看form_errors block in 2.1form_errors block in 2.2,您会发现错误显示方式的不同。您可以覆盖该块并以旧方式执行,然后在需要的任何地方导入该模板,或者您可以简单地按照您在上面所做的方式翻译错误消息(这是我通常这样做的方式并且完全可以接受)。

如果您要走$translator->trans 的路线,那么我会在参数中使用%..%,如Symfony documentation 中所述:

占位符可以采用任何形式,因为完整的消息是使用 PHP strtr 函数重建的。但建议使用 %...% 形式,以避免在使用 Twig 时出现问题。

您使用的 {{ }} 更多地归类为使用 Symfony 验证器以及它们如何构建违规行为 (example here)。

现在,如果您希望自动翻译您的消息和参数而无需手动抛出 FormError,那么我建议您为您尝试执行的任何操作创建一个自定义验证器,并在那里构建消息。否则,只需按照您已经弄清楚的方式手动翻译即可。

【讨论】:

  • 很好的解释。谢谢!
猜你喜欢
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多