2013-07-20 10 views
8

Mi chiedevo se è possibile definire un file parameters.yml per ogni pacchetto o solo per i bundle che ne hanno bisogno e caricarli.A parameters.yml per bundle, symfony2

Ho cercato molto ma non riesco a trovare una soluzione del genere.

+0

Cosa stai cercando di realizzare qui? Sto solo chiedendo, perché sto interpretando la tua domanda in due modi diversi. Aggiungi un file parameters.yml al tuo bundle? Oppure utilizzare un file parameters.yml globale per un elenco dei propri bundle? – UrGuardian4ngel

+0

dovrei essere in grado di utilizzare una nuova connessione che ho specificato in un pacchetto (non globale) –

+0

In tal caso, Thomas ha già scritto la risposta;) – UrGuardian4ngel

risposta

15

Si dovrebbe chiarire un po '; vuoi che ogni singolo pacchetto includa automaticamente un file parameters.yml? Ho paura che tu abbia bisogno di modificare il DI core di Symfony. C'è un'alternativa facile però.

Se si crea il proprio pacchetto con un numero di DependencyInjection, è possibile aggiungere $loader->load('parameters.yml'); nella classe di estensione del pacchetto.

La classe di estensione deve trovarsi in YourBundle/DependencyInjection/YourBundleExtension.php.

La classe dovrebbe apparire come il seguente

class YourBundleExtension extends Extension 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     $configuration = new Configuration(); 
     $config = $this->processConfiguration($configuration, $configs); 

     $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.yml'); 
     $loader->load('parameters.yml'); // Adding the parameters file 
    } 
} 

Quindi, in questo caso il file parameters.yml sarebbe in YourBundle/Resources/config/parameters.yml.

+0

Penso che l'ordine delle importazioni sia importante. Se 'services.yml' richiede alcuni parametri definiti in' parameters.yml', è possibile incontrare qualche problema, perché questi non sono ancora noti. O lo vedo nel modo sbagliato? – UrGuardian4ngel

+0

Ho appena provato e ha funzionato; è possibile utilizzare un parametro da un file caricato in seguito. La mia ipotesi è che Symfony compili il file di configurazione in seguito quando tutti i parametri sono stati uniti e deduplicati. Tuttavia non sembra funzionare tra i bundle. –

+0

E come posso aggiungere questo anche alla configurazione di doctrine (quindi ottengo una nuova connessione) –

2

Se si desidera includere un file di parametri da un pacchetto nella configurazione, basta seguire il formato normale per importare i file di configurazione aggiuntivi dai pacchetti (l'applicazione predefinita mostra come eseguire tale operazione con il routing). Aggiorna il tuo config per includere il file i parametri in questo modo:

imports: 
    - { resource: parameters.yml } 
    - { resource: @YourBundle/Resources/config/parameters.yml } 
    - { resource: security.yml } 
    - ... 

Il file parametri dovrebbe seguire lo stesso formato di default:

parameters: 
    my.parameter: "my value" 
+0

che funzionerebbe solo per la prima importazione, poiché la seconda importazione (dal pacchetto) sostituiva il contenuto dei parametri della prima importazione. vedere perché: https://github.com/symfony/DependencyInjection/blob/master/ParameterBag/ParameterBag.php#L120-123 – Michael

+0

Questo sovrascriverebbe solo i singoli parametri con lo stesso nome, non l'intero lotto. Nella mia limitata esperienza di un progetto, sto usando con successo un parametro parameters.yml e un bundle parameters.yml con entrambi i set disponibili nell'app (anche se il mio secondo bundle non ha parametri propri, non mi aspetterei di avere qualsiasi problema a meno che i parametri non siano stati chiamati la stessa cosa). – DanielM

+0

Mh strano, l'ho provato con l'ultimo 2.4.3 e non ha avuto successo. Forse ero solo io a fare qualcosa di sbagliato. – Michael

Problemi correlati