Symfony 2.0 のバンドル内でセマンティック構成を公開しようとしていますが、NodeDefinition クラスで defaultValue を機能させるのに問題があります。空のバンドルを生成し、構成が機能するために必要なファイルを作成し、構成値を取得できましたが、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');
}
}
したがって、上記の構成クラスから、構成項目「test_bundle.foo」が欠落している場合、その値は「bar」に設定されます...はい? うーん、そう思ったけどそうじゃない。