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;
}
我目前正在开发一个 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;
}