2011-10-13 19 views
6

Wiem, że mogę nadpisywać szablony lub rozszerzać klasy innych pakietów. Ale czy mogę także rozszerzyć konfiguracje? Miałem nadzieję, że będę mógł załadować inne przestrzenie nazw z konfiguracji w metodzie ładowania DependenyInjection/AcmeExtension.php, ale nigdzie niczego nie znalazłem.Jak przedłużyć konfigurację innego pakietu w Symfony2?

przykład:

mam AcmeBundle który wyznacza następującą w konfiguracji:

acme: 
    a: 1 

że chcemy przedłużyć ten pakiet (w nowych wiązki zwanego AwesomeAcmeBundle) i jest w stanie określić kolejne zmienne albo dodawanie ich do oryginalnej przestrzeni nazw:

acme: 
    a: 1 
    b: 2 

lub przez zawijanie oryginalnej przestrzeni nazw do nowej nd dodanie nowych zmiennych tam:

awesome_acme: 
    a: 1 
    b: 2 

Odpowiedz

1

Jeśli mówisz o .yml s, można importować AcmeBundle s confing w AwesomeAcmeBundle config z

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

a następnie nadpisać parametry chcesz.

Symfony robi to samo w parametrze config_dev.yml z parametrem framework/router.

+0

Nie, nie o to mi chodziło. Chcę rozszerzyć konfigurację (aka 'DependencyInjection/Configuration.php') jakiegoś pakietu, a nie tylko plik konfiguracyjny. –

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

miałem podobne potrzeby i rozwiązali je w następujący sposób:

1) przebiegają klasy Configuration rodzica

//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) Utwórz własne rozszerzenie, które rzeczywiście może obsłużyć nowy pozycje konfiguracyjne

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) w app\config\config.yml możesz używać w swoim nowym foo zestaw atrybutów wszystkich parametrów, które ma derp (jako pakiet nadrzędny) oraz dowolne nowe parametry zdefiniowane w Configuration.php.

+0

Musiałem dodać kilka dodatkowych konfiguracji do istniejącej konfiguracji pakunku. Pod węzłem głównym istniejącego pakietu. Nie działałoby to w ten sposób, ponieważ symfony nie zezwala na żadną inną nazwę root'a niż podkreśloną wersję nazwy twojego pakietu. Czy znasz sposób, aby naprawdę rozszerzyć istniejące drzewo konfiguracji, pozostając w tym samym katalogu głównym? – axelvnk

Powiązane problemy