Symfony表单错误消息参数用法

时间:2016-02-08 14:09:03

标签: php forms symfony symfony-forms

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))
    )
);

但我对这些错误参数非常好奇。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

  

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

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

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

  

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

您正在使用的{{ }}更倾向于使用Symfony Validators以及它们如何构建违规行为(example here)。

现在,如果您希望自动翻译您的消息和参数而不手动抛出FormError,那么我只是建议为您尝试做的任何事情创建自定义验证器,并在那里构建消息。否则,只需按照您已经弄清楚的方式手动翻译它。