2011-10-13 9 views
6

テンプレートを上書きしたり、他のバンドルのクラスを拡張することができます。しかし、configsも拡張できますか?私はDependenyInjection/AcmeExtension.phpのloadメソッドの設定から他の名前空間をロードできるようにしたいと考えていましたが、どこでも何も見つけられませんでした。Symfony2で異なるバンドルの設定を拡張するには?

例:

私は設定して、次の定義AcmeBundleがあります

acme: 
    a: 1 

私は(AwesomeAcmeBundleと呼ばれる新しいバンドルに)このバンドルを延長し、いずれかの他の変数を定義することができるようにしたいです元の名前空間に追加する:

acme: 
    a: 1 
    b: 2 

または新しい名前空間に元の名前空間をラップするNDそこに新しい変数を追加:

awesome_acme: 
    a: 1 
    b: 2 

答えて

1

あなたが.ymlの話をしている場合は、あなたが

imports: 
    - { resource: path/to/AcmeBundles/config.yml } 

AwesomeAcmeBundle設定にAcmeBundleのconfingをインポートして、必要なパラメータを上書きすることができます。

config_dev.ymlframework/routerパラメータでSymfonyは同じことをしています。

+0

いいえ、それはまさに私が意味するものではありません。私は設定ファイルだけでなく、バ​​ンドルの設定(別名 'DependencyInjection/Configuration.php')を拡張したいと思います。 –

1
imports: 
- { resource: @YourBundle/Resources/config/services.yml } 
2

私は、同様のニーズを持っていた私は、次の方法でそれらを解決してきた:

1)

//FooBundle\DependencyInjection\Configuration.php 

use DerpBundle\DependencyInjection\Configuration as BaseConfiguration; 

class Configuration extends BaseConfiguration 
{ 

    public function getConfigTreeBuilder() 
    { 
     $treeBuilder = parent::getConfigTreeBuilder(); 

     //protected attribute access workaround 
     $reflectedClass = new \ReflectionObject($treeBuilder); 
     $property = $reflectedClass->getProperty("root"); 
     $property->setAccessible(true); 

     $rootNode = $property->getValue($treeBuilder); 

     $rootNode 
      ->children() 
      ... 

     return $treeBuilder; 
    } 
} 

2親のConfigurationクラスを拡張して)実際に新しいを扱うことができる独自の拡張機能を作成します。構成エントリ

class FooExtension extends Extension 
{ 

    public function load(array $configs, ContainerBuilder $container) 
    { 

     $configuration = new Configuration(); 
     $config = $this->processConfiguration($configuration, $configs); 

     //custom parameters 
     $container->setParameter('new_param_container_name', $config['new_param_name']); 

    ... 
    } 
} 

3)app\config\config.ymlで新しい0で使用できますアトリビュート:derp(親バンドルとして)に、Configuration.phpで定義した新しいパラメータを加えたすべてのパラメータを設定します。

+0

既存のバンドル設定に追加の設定を追加しなければならなかった。その既存のバンドルのルートノードの下。これは、symfonyがあなたのバンドル名の下線付きバージョン以外のルート名を許可しないので、このようには動作しません。同じルートノードの下に留まっている間に、既存の設定ツリーを実際に拡張する方法を知っていますか? – axelvnk

関連する問題