Chr*_*ris 2 php configuration symfony
我正在尝试在Symfony 2.0中的bundle中公开语义配置,但是我无法让defaultValue在NodeDefinition类中工作.我生成了一个空包并为配置创建了必要的文件,我可以获得配置值,但我想将defaultValue设置为配置项.我使用defaultValue()方法并从我的config.yml中删除配置项,然后它显示一个空数组?任何人都可以解释defaultValue()实际上是如何工作的,我错过了什么吗?
<?php
// ./DependencyInjection/Configuration.php
namespace Test\Bundle\TestBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('test_bundle');
        $rootNode
            ->children()
                ->scalarNode('foo')->defaultValue('bar')->end()
            ->end();
        return $treeBuilder;
    }
}
-
<?php
// ./DependencyInjection/TestBundleExtension.php
namespace Test\Bundle\TestBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
class TestBundleExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);
        var_dump($configs); // empty array
        $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.xml');
    }
}
所以从上面的Configuration类中肯定当缺少配置项'test_bundle.foo'时,它的值将被设置为'bar'...是的?那就是我的想法,但事实并非如此.
您的根节点是一个数组节点.默认情况下,如果您未设置密钥,则不会应用默认值.有关如何使默认值工作的2个示例:
将值设置为null:
# in the config.yml
test_bundle:
    foo: ~
如果未设置,请告诉根节点使用默认值:
// in your Configuration.php
$rootNode
    ->addDefaultsIfNotSet()
    ->children()
        ->scalarNode('foo')->defaultValue('bar')->end()
    ->end();
# in the config.yml
test_bundle: ~