2016-12-15 19 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フィルタはすべての属性に適用された場合でも、それはおそらくまだwouldn 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

関連する問題