Symfony 3 FormType 使用 attr 的翻译

Symfony 3 FormType use translation for attr

我目前正在为一个人开发 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")')
            ))

提前致谢。

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"),而我我猜你只想翻译 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') . '")'
        ))