Php Symfony表单错误消息参数用法

Php Symfony表单错误消息参数用法,php,forms,symfony,symfony-forms,Php,Forms,Symfony,Symfony Forms,Symfony表单错误中消息参数数组的用途是什么 例如,我有以下情况:在一个表单上,我有一个订阅者,在这个订阅者中,根据用户提供的信息,可能会调用一个API,并且可能会在Symfony表单中添加一些额外的错误 因此,当发生错误时,我会在字段上添加一个新错误: $myForm->get('name')->addError( new FormError('name.api_invalid', null, array('{{ api_name }}' => $someValu

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))
    )
);
但我真的很好奇这些错误参数


谢谢大家!

您看到的行为是:

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

如果您查看与,您将看到错误显示方式的差异。您可以覆盖该块并以旧的方式进行操作,然后在需要的任何地方导入该模板,或者您也可以按照上面的方式简单地转换错误消息(这是我通常的做法,完全可以接受)

如果您选择的是
$translator->trans
,那么我会在参数中使用
%..%
,如下所述:

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

您正在使用的
{{}
更倾向于使用Symfony验证器以及它们如何构建冲突()


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

我不知道这是否可行,但我建议将
{api_name}}
替换为
%api_name%
,它更像Symfony约定和参数用法。您使用翻译消息的方式看起来像一个细枝变量,而实际上不是。@JasonRoman-Hmm。。。我选择了
{{api_name}}
,因为这也是Symfony约束消息()中使用变量的方式。尝试使用%代替,但仍然没有运气,不过,无论如何,最终这只是一个令牌,所以无论每个开发人员喜欢什么语法,它都应该工作。。。但它不是:)很好的解释。谢谢