我目前正在为一个人制作FormType。我想要一个自定义有效性消息,因此我使用oninvalid
和onchange
属性。但是,这些属性中使用的翻译将不起作用。我只收到一条自定义有效性消息“person.label.firstname”。
标签和占位符的翻译确实有效。那么为什么它不能与onchange和oninvalid一起使用? (是的,翻译确实存在)
$builder->add("firstname", TextType::class, array(
"label" => "person.label.firstname",
"attr" => array("placeholder" => "person.label.firstname",
"pattern" => "^[a-zA-Z \-]+",
"oninvalid" => 'setCustomValidity("person.validity.firstname")')
))
提前谢谢。
答案 0 :(得分:0)
placeholder
的翻译有效,因为trans
过滤器应用于默认模板以呈现表单小部件,如下所示:https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig#L333
但即使trans
过滤器已应用于所有属性,它仍可能无法按预期运行,因为oninvalid
的值为setCustomValidity("person.validity.firstname")
,而我&#39 ;我猜你只想翻译person.validity.firstname
。
要解决您的问题,请将translator
服务注入您的表单类型,并使用显式翻译的值设置属性:
$builder->add("firstname", TextType::class, array(
"label" => "person.label.firstname",
"attr" => array("placeholder" => "person.label.firstname",
"pattern" => "^[a-zA-Z \-]+",
"oninvalid" => 'setCustomValidity("' . $this->translator->trans('person.validity.firstname') . '")'
))