2017-05-16 7 views
1

すべてのフォーム要素に対してカスタムヘルパーメッセージ(htmlデータ属性)を実装したいと思います。ヘルパーメッセージはYAML langファイル(messages.en.yml)で定義されていますが、すべてのフォーム要素にヘルパーメッセージがあるわけではありません。symfony 3は、翻訳メッセージに基づいてフォームフィールドに属性を動的に追加します

問題は、Symfony FormTypeまたはSymfony Formイベントを使用して行うことができないということです。

Formイベントをサービスとして作成し、トランスレータサービスを挿入し、そこからデータを操作してヘルパークラスを追加することを考えていましたが、どのようにして実例が見つかりませんでした。

私が考えていた他のオプションは、Traitを使用してトランスレータサービスを特性に注入し、そこからコードを開発することですが、それほど適切ではないと思います。

誰かが自分の経験を共有し、この特定の問題を解決する方法を手がかりにすることはできますか?あなたがregistering the form as a serviceとフォームにYAML configurationを注入することによって行うことができます

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('title', TextType::class, array(
       'label_format' => 'admin.intro.form.%name%', 
       'attr' => [ 
        'data-helper' => 'Please enter title' 
       ] 

      ) 
     ) 
     ->add('content', TextareaType::class, array(
       'label_format' => 'admin.intro.form.%name%', 
       'required' => false, 
       'attr' => [ 
        'class' => 'mceEditor' 
       ] 
      ) 
     ) 
     ->add('isEnabled', CheckboxType::class, array(
       'label_format' => 'admin.intro.form.%name%', 
       'required' => false, 
      ) 

答えて

1

:ここ

は私のセットアップ

messages.en.yml

intro: 
     created: Intro created! 
     edited: Intro has been edited successfully! 
     deleted: Intro has been has been deleted! 
     index: 
      title: List of all intros 
     new: 
      title: New intro 
     show: 
      title: Details of intro 
     edit: 
      title: Edit intro 
     form: 
      title: Title 
      content: Content 
      isEnabled: Is active 
     tooltip: 
      title: Please enter title 

私のフォームタイプです。

config.yml

message_config: 
    intro: 
      created: Intro created! 
      edited: Intro has been edited successfully! 
      deleted: Intro has been has been deleted! 
      index: 
       title: List of all intros 
      new: 
       title: New intro 
      show: 
       title: Details of intro 
      edit: 
       title: Edit intro 
      form: 
       title: Title 
       content: Content 
       isEnabled: Is active 
      tooltip: 
       title: Please enter title 

services.yml

services: 
app.form.type.my_form: 
    class: AppBundle\Form\Type\MyForm 
    arguments: 
     - '%message_config%' 
    tags: 
     - { name: form.type } 

今、あなたはあなたにformTypeで配列を扱うことができます。

<?php 

namespace AppBundle\Form\Type; 

class MyForm 
{ 
    protected $messages; 

    public function __construct(array $messages) 
    { 
     $this->messages = $messages; 
    } 
} 

TranslatorサービスでYAML設定を使用している場合は、代わりに翻訳サービスを挿入します。

更新:SymfonyはTranslatorコンポーネントでこれを行い、Twigフォームのテーマは以下のコメントを参照してください。

+0

ありがとうございます。すべてのフォームに同じ設定を適用できますか? – user2496520

+0

このようなアプリケーションが必要な場合は、Symfonyの翻訳コンポーネントを見て、ベストプラクティスを適用することをお勧めします。 http://symfony.com/doc/current/translation.html – Nomad145

+0

これはあなたの問題を実際に解決するはずです。 Translation Twig Extensionを登録し、Twigフォームのテーマに直接翻訳を追加することができます。このソリューションでは、すべてのフォームが翻訳され、翻訳者を注入する必要はありません。 http://symfony.com/doc/current/components/form.html#translation – Nomad145

関連する問題