我正在构建我的第一个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",找不到
我做错了什么?
答案 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)
首先,你做错了:)。
Configuration.php
应该构建树(不是扩展名)*Extension.php
加载资源(不是树)也许它有用,但我不知道yml中BDConfigBundle
是b_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);
// ...
}
}
希望这会有所帮助;)。