2016-09-28 45 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();