Symfony捆绑配置

时间:2015-03-27 08:48:57

标签: php symfony configuration bundle

我正在构建我的第一个symfony软件包,由于某种原因,我无法让配置工作。

的configuration.php

..........
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
        $loader->load('custom.yml');
..........

custom.yml

bd_config:
 version: 2

ConfigExtension.php

 $rootNode = $treeBuilder->root('bd_config');


        $rootNode->
          children()
            ->integerNode('version')->end()
          ->end();

        return $treeBuilder;

我收到此错误

  

没有扩展功能可以加载" bd_config" (在/Library/WebServer/symfony/src/BD/ConfigBundle/DependencyInjection/../Resources/config/custom.yml)。查找命名空间" bd_config",找不到

我做错了什么?

2 个答案:

答案 0 :(得分:1)

使用bundle配置有一个命名约定。您的配置根必须采用以下格式:

vendor_bundle

如果您的包名称是驼峰式的,并且包含多个单词(除了Bundle和供应商名称),那么它还包含_符号。例如:CompanySuperSymfonyBundle将是company_super_symfony

之后,您可以设置配置:

company_super_symfony:
    version: 100

TreeBuilder作为:

$rootNode->
      children()
        ->integerNode('version')->end()
      ->end();

您不必使用Loader加载任何内容,但必须将配置添加为容器参数:

$container->setParameter('version', $config['version']);

然后,在你的控制器中:

... = $this->container->getParameter('version');

答案 1 :(得分:0)

首先,你做错了:)。

  1. 您的yml无效(1个空格缩进)
  2. Configuration.php应该构建树(不是扩展名)
  3. *Extension.php加载资源(不是树)
  4. 也许它有用,但我不知道yml中BDConfigBundleb_d_config。我会将BdConfig用作bundlename,将bd_config用作yml root。

    然后我会在config.yml中导入你的yml:

    config.yml

    imports:
        - { resource: custom.yml }
    

    BdConfigStoreExtension.php

    class BdConfigStoreExtension extends Extension
    {
        public function load(array $configs, ContainerBuilder $container)
        {
            $configuration = new Configuration();
            $bdConfigNode = $this->processConfiguration($configuration, $configs);
            // ...
        }
    }
    

    希望这会有所帮助;)。