Symfony捆绑包配置


Symfony bundle config

我正在构建我的第一个symfony捆绑包,由于某种原因,我无法进行配置。

配置.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_connfig",未找到

我做错了什么?

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

vendor_bundle

其中,如果您的捆绑包名称是驼色大小写的,并且由多个单词组成(除了捆绑包和供应商名称),则它包含更多的_符号。例如:CompanySuperSymfonyBundle将是company_super_symfony

之后,您可以设置您的配置:

company_super_symfony:
    version: 100

树生成器:

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

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

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

然后,在你的控制器中:

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

首先,你做错了:)。

  1. yml无效(缩进1个空格)
  2. Configuration.php应该构建树(而不是扩展)
  3. *Extension.php加载资源(而不是树)

也许这样可以,但我不知道BDConfigBundle是否是yml中的b_d_config。我会使用BdConfig作为bundlename,bd_config作为yml根。

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

配置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);
        // ...
    }
}

希望这能有所帮助;)。