2011-10-13 18 views
6

So di poter sovrascrivere i modelli o estendere le classi di altri pacchetti. Ma posso estendere anche le configurazioni? Speravo di poter caricare altri spazi dei nomi dalla configurazione nel metodo di caricamento di DependenyInjection/AcmeExtension.php, ma non ho trovato nulla su di esso da nessuna parte.Come estendere la configurazione di bundle diversi in Symfony2?

Esempio:

Ho AcmeBundle che definisce seguente in config:

acme: 
    a: 1 

voglio estendere questo fascio (nuova pacchetto definito AwesomeAcmeBundle) ed essere in grado di definire altre variabili mediante aggiungendoli allo spazio dei nomi originale:

acme: 
    a: 1 
    b: 2 

o spostando lo spazio dei nomi originale in uno nuovo a ND aggiungendo nuove variabili c'è:

awesome_acme: 
    a: 1 
    b: 2 

risposta

1

Se stai parlando i .yml s, è possibile importare il AcmeBundle s confing nel AwesomeAcmeBundle config con

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

e quindi sovrascrivere i parametri desiderati.

Symfony sta facendo lo stesso nel parametro config_dev.yml con il parametro framework/router.

+0

No, non è esattamente quello che intendevo. Voglio estendere la configurazione (alias 'DependencyInjection/Configuration.php') di qualche pacchetto, non solo il file di configurazione. –

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

ho avuto esigenze simili e li ho risolti nel modo seguente:

1) Estendere del genitore classe di configurazione

//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) Create proprio interno che in realtà in grado di gestire il nuovo voci di configurazione

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) nella app\config\config.yml è possibile utilizzare nel vostro nuovo 0 Attributo: consente di impostare tutti i parametri che derp (come gruppo principale) ha più eventuali nuovi parametri definiti in Configuration.php.

+0

Ho dovuto aggiungere alcune configurazioni aggiuntive a una configurazione di bundle esistente. Sotto il nodo radice di quel pacchetto esistente. Non funzionerebbe in questo modo perché symfony non consente alcun altro nome di root rispetto alla versione sottolineata del nome del bundle. Conoscete un modo per estendere realmente un albero di configurazione esistente, rimanendo nello stesso nodo radice? – axelvnk

Problemi correlati