Symfony 表单错误信息参数使用

Symfony form error message parameters usage

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."

翻译消息时,"parameters" 不会被替换。

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

注意:我可以使用

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

不过我真的很好奇那些错误参数。

谢谢!

您看到的行为是 changed in Symfony 2.2:

Translating validation errors is now optional. You can still do so manually if you like, or you can simplify your templates to simply output the already translated message.

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

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

中所述

The placeholders can take on any form as the full message is reconstructed using the PHP strtr function. But the %...% form is recommended, to avoid problems when using Twig.

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

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