2016-12-15 124 views
1

我目前正在为一个人的FormType。我想要一个自定义有效性消息,因此我使用oninvalidonchange属性。但是,这些属性中使用的翻译将不起作用。我只收到一个自定义有效性消息,说“person.label.firstname”。Symfony 3 FormType使用翻译为attr

标签和占位符的翻译工作。那么为什么它不与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

的翻译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') . '")' 
     )) 
+0

首先谢谢你的回答。但是,该转换器是该FormType中未定义的方法。例如,我如何注入验证器yaml翻译文件? – Mason

+0

要将服务注入到表单中,您必须将其注册为服务。以下是关于如何执行此操作的文档文章:https://symfony.com/doc/current/form/create_custom_field_type.html#form-field-service –

+0

好的,我会尽力让它工作。谢谢! – Mason