Symfony 3 FormType使用attr的翻译

时间:2016-12-15 08:22:26

标签: php forms validation translation symfony

我目前正在为一个人制作FormType。我想要一个自定义有效性消息,因此我使用oninvalidonchange属性。但是,这些属性中使用的翻译将不起作用。我只收到一条自定义有效性消息“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")')
            ))

提前谢谢。

1 个答案:

答案 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') . '")'
        ))