2016-09-28 36 views
8

我想爲我的類定義配置模式,並使用管理員選項覆蓋它們。 爲了做到這一點,我需要一個表單來捕獲管理員的數據。如何基於TreeBuilder對象動態構建表單?

在Symfony Configuration Component中,TreeBuilder類負責定義配置模式。如你所知Form Component有類似於TreeBuilder的樹狀結構。

如何根據TreeBuilder實例動態製作一個Form對象?

+0

你可以使用'formBuilder'來動態構建基於'treeBuilder'輸出的表單嗎? – Rvanlaak

+0

這怎麼可能以自動方式? –

回答

1

您的treebuilder或其一部分必須是可迭代的。所以通過讓它表示儘可能嚴格的形式,您可以使用它來輕鬆地將配置映射到構建器。這將是最容易使用的yml格式:

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

見的配置組件的處理部分以獲得更多信息: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();