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))
)
);
但我对这些错误参数非常好奇。
谢谢!
答案 0 :(得分:2)
您正在查看的行为是changed in Symfony 2.2:
翻译验证错误现在是可选的。如果您愿意,您仍然可以手动执行此操作,或者您可以简化模板以简单地输出已翻译的消息。
如果您查看form_errors
block in 2.1与form_errors
block in 2.2,您会看到错误显示方式的差异。您可以覆盖块并以旧方式执行,然后将该模板导入到您需要的任何位置,或者您可以按照上面的方式简单地翻译错误消息(这是我通常所做的,并且完全可以接受)。
如果您要走$translator->trans
的路线,那么我会在参数中使用%..%
,如Symfony documentation中所述:
占位符可以采用任何形式,因为使用PHP strtr函数重建完整的消息。但建议使用%...%表格,以避免在使用Twig时出现问题。
您正在使用的{{ }}
更倾向于使用Symfony Validators以及它们如何构建违规行为(example here)。
现在,如果您希望自动翻译您的消息和参数而不手动抛出FormError
,那么我只是建议为您尝试做的任何事情创建自定义验证器,并在那里构建消息。否则,只需按照您已经弄清楚的方式手动翻译它。