私はsymfony 2.0でバンドル内のセマンティック設定を公開しようとしていますが、NodeDefinitionクラスで動作するdefaultValueの取得に問題があります。私は空のバンドルを生成し、設定が機能するために必要なファイルを作成しました。設定値を取得できましたが、defaultValueを設定項目に設定します。私はdefaultValue()メソッドを使用し、config.ymlから設定項目を削除して空の配列を表示しますか?誰かがdefaultValue()が実際にどのように動作するか説明できますか?何か不足していますか?symfony 2.0 NodeDefinitionで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が」不足しているとき、それは価値がはい...「バー」に設定されますですか?それは私が思ったものですが、そうではありません。
例#1は機能しません。値としてnullが処理されます。しかし、例#2が機能していたので、キーが見つからない場合はConfigurationがそれを追加してdefaultValueに設定します。ありがとうJF Simon !! –
たとえば#1の場合、APIドキュメントにあるtreatNullLikeを使用できます。 –