2016-12-15 123 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