2016-09-28 8 views
8

自分のクラスの設定スキーマを定義し、管理者の選択肢でそれらを上書きしたいと思います。 これを行うには、管理者からデータを取得するためのフォームが必要です。TreeBuilderオブジェクトに基づいてフォームを動的に構築する方法は?

symfony Configuration Componentでは、TreeBuilderクラスがコンフィグレーションスキーマを定義します。あなたが知っているようにForm Componentは、TreeBuilderに似た木構造を持っています。

動的にFormオブジェクトをTreeBuilderインスタンスに基づいて動的に作成するにはどうすればよいですか?

+0

'formBuilder'を使用して、' treeBuilder'出力に基づいてフォームを動的に構築できますか? – Rvanlaak

+0

どのように自動で可能ですか? –

答えて

1

あなたのツリービルダーまたはその一部は、反復可能でなければなりません。したがって、フォームを可能な限り厳密に表現することによって、構成をビルダーに簡単にマップすることができます。それはymlの形式を使用するのが最も簡単でしょう:

form: 
    name: 'exampleForm' 
    path: 'target_path' 
    fields: 
     fieldName: 
      type: 'TextType' 
      attr: 
       # some additional options 
     otherFieldName: 
      type: 'TextType' 
      attr: 
       # some additional options 

は、より多くの情報のためのconfigコンポーネントの処理を参照してください:http://symfony.com/doc/current/components/config/definition.html#processing-configuration-values

加工した構成は、フォームの工場で扱うことができ、おそらくのようになります。これは

$config = $configuration->processConfiguration($config, FormType::class, null, $config['path']); 
$formBuilder = $container->get('form.factory')->createNamedBuilder($config['name'); 

foreach ($config['fields'] as $field) { 
    $formBuilder->add($fieldName, $field['type'], $field['attr']); 
} 
$form = $formBuilder->createForm(); 
関連する問題