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

时间:2016-12-15 09:53:58

标签: php forms service translation symfony

我目前正在开发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工作?我是否必须将其作为服务注入(如何?)或者我应该将其作为参数传递给此formtype(仍然如何?)?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我同意@Matteo,它应该直接在你的表格中开箱即用。

[project] \ app \ config \ config.yml应该有:

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

在“[projet] \ src [App] Bundle \ Ressources \ translations \”所有文件:“message。[lang 2 char code] .yml”

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

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

同样,“。mil”文件不接受“标签符号”(仅“空格标志”)。

验证消息也应该在“[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;
}