Symfony 3 将翻译器注入表单类型

Symfony 3 Inject translator to Form Type

我目前正在开发一个 FormType,我想在其中使用特殊属性的转换器。

$builder->add("firstname", TextType::class, array(
              "label" => "person.label.firstname",
              "attr" => array(
                  "placeholder" => "person.label.firstname",
                  "pattern" => "^[a-zA-Z \-]+",
                  "oninvalid" =>  'setCustomValidity("' . $translator->trans('person.validity.firstname') . '")')
            ))

那么如何让 $translator 工作呢?我是否必须将其作为服务注入(如何?)还是应该将其作为参数传递给此表单类型(还是如何?)?

提前致谢。

我同意@Matteo 的观点,它应该在您的表单中开箱即用。

[项目]\app\config\config.yml 应该有:

framework:
    ....
    translator: {fallbacks:["en"]}
    translator: 
        paths: 
           - "@[App]Bundle/Resources/translations"
    ...

在“[projet]\src[App]Bundle\Ressources\translations\”下的所有文件:"messages.[lang 2 char code].yml"

在您的情况下,文件 "messages.en.yml" 应该如下所示:

person:
   label:
      firstname: "firstname"
      lastname: "lastname"

还要注意“.yml”文件不接受 "tab sign"(仅 "space sign")。

验证消息也应该在“[projet]\src[App]Bundle\Ressources\translations\”下,在这样命名的文件中:"validators.[lang 2 char code].yml"

你的情况 "validators.en.yml":

person:
   validity:
      firstname: "firstname doesn't match"

"firstname" 的有效性规则应该是与您的表单一起使用的 data_class 中的注释。

class [YOUR DATA_CLASS] {
    /**
    * @Assert\NotBlank()
    * @Assert\Regex(
    *   groups= {[if needed]}
    *   pattern = "^[a-zA-Z \-]+",
    *   match= "false",
    *   message = "person.validity.firstname")
    *   
    */
    public $firstname;
}