我想为我的类定义配置模式,并使用管理员选项覆盖它们.
为了做到这一点,我需要一个表单来从管理员捕获数据.
为了做到这一点,我需要一个表单来从管理员捕获数据.
在Symfony配置组件中,TreeBuilder类负责定义配置模式.并且如您所知,Form Component具有类似于TreeBuilder的树状结构.
如何基于TreeBuilder实例动态制作Form对象?
您的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();