Symfony2的。如何捆绑多个配置文件

时间:2014-06-27 19:42:12

标签: symfony config

我无法解决这个问题。

我正在Symfony2中编写一个报表生成器。

我有这样的配置文件:

bundle:
  sections:
    Report1:
      buckets:
        bucket1:
        ...
      calculations:
        calculation1:
        ...
      report:
        rows:
          row1:
          ...

对于一些报告,这可能是不合时宜的。

我已尝试将此文件分成较小的文件并单独加载。这没有用。这就是我的尝试:

public function load(array $configs, ContainerBuilder $container)
{
    $configuration = new Configuration();
    $config = $this->processConfiguration($configuration, $configs);

    $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
    $loader->load('bundle_report.yml');
    $loader->load('bundle_report_1.yml');  // Order is important here
    $loader->load('bundle_report_2.yml');
    $loader->load('bundle_report_3.yml');
    $loader->load('services.yml');
}

最好的方法是什么?它甚至可能吗?

我得到的错误是(在$ loader-> load()s发生之前抛出异常):

The child node "sections" at path "bundle" must be configured

如果我先切换订单($ loader-> load()s,那么新的Configuration()):

 There is no extension able to load the configuration for "bundle"

配置如下所示:

public function getConfigTreeBuilder()
{
    $treeBuilder = new TreeBuilder();
    $rootNode = $treeBuilder->root('bundle');

    $rootNode
        ->children()
            ->arrayNode('sections')->isRequired()
                ->prototype('array')
                ...

2 个答案:

答案 0 :(得分:1)

这就是我的所作所为。

  1. 将所有内容加载到一个'bundle.yml'配置文件中。
  2. 将该文件放入app / config
  3. 在app / config.yml导入部分

  4. 中导入它
  5. 在我的包中定义了'Configuration'类(见上文)。捆绑生成器创建了这个。

  6. 然后,在我的BundleReportExtension类中添加了这些行

    // Parse our configuration.  It's included in /app/config/config.yml
    // Parser is Configuration class in this package.
    $configuration = new Configuration();
    $config = $this->processConfiguration($configuration, $configs);
    
    // Great.  Parsed.  Now copy to parameters for later use.
    $container->setParameter('bundle.default_config', $config['default_config']);
    $container->setParameter('bundle.sections', $config['sections']);
    
  7. 现在,我无法将配置作为数组获取:

        $container->setParameter('bundle.sections');
    

    在很多搜索中,这是我能想到的最好的。如果您有其他建议,请分享。

答案 1 :(得分:0)

您不应该从load方法加载配置文件。 这是

  • 从Configuration class
  • 加载基本配置
  • 将其与自定义配置(app / config /中的yml文件)进行比较
  • 并加载捆绑服务

所有配置文件必须位于 app / config / 中,才能作为参数传递给load方法。正如你在这里所做的那样,它们毫无用处。 这就是你得到的原因

The child node "sections" at path "bundle" must be configured

如果您的报告正在发展,也许最好将其放入业务逻辑(模型/实体)并插入管理员(例如:奏鸣曲管理员)。