2012-05-05 20 views
2

私は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が」不足しているとき、それは価値がはい...「バー」に設定されますですか?それは私が思ったものですが、そうではありません。

答えて

5

ルートノードはアレイノードです。デフォルトでは、キーを設定しないと、デフォルト値は適用されません。デフォルト値の作業を取得する方法についての2例は:

  1. はNULLとして値を設定します。

    # in the config.yml 
    test_bundle: 
        foo: ~ 
    
  2. 設定されていない場合は、デフォルト値を使用するようにルートノードを教える:

    // in your Configuration.php 
    $rootNode 
        ->addDefaultsIfNotSet() 
        ->children() 
         ->scalarNode('foo')->defaultValue('bar')->end() 
        ->end(); 
    
    # in the config.yml 
    test_bundle: ~ 
    
+0

例#1は機能しません。値としてnullが処理されます。しかし、例#2が機能していたので、キーが見つからない場合はConfigurationがそれを追加してdefaultValueに設定します。ありがとうJF Simon !! –

+1

たとえば#1の場合、APIドキュメントにあるtreatNullLikeを使用できます。 –

関連する問題