2013-07-20 10 views
8

Zastanawiam się, czy możliwe jest zdefiniowanie pliku parameters.yml dla każdego pakunku lub tylko dla pakietów, które go potrzebują i załadować je.Parametr.yml na pakiet, symfony2

Szukałem dużo, ale nie mogę znaleźć takiego rozwiązania.

+0

Co chcesz osiągnąć tutaj? Po prostu pytam, ponieważ interpretuję twoje pytanie na dwa różne sposoby. Dodaj plik parameters.yml do swojego własnego pakietu? Lub użyj globalnego pliku parameters.yml, aby wyświetlić listę własnych pakietów? – UrGuardian4ngel

+0

Powinienem móc użyć nowego połączenia określonego w pakiecie (nie globalnym). –

+0

W takim przypadku Thomas napisał już odpowiedź;) – UrGuardian4ngel

Odpowiedz

15

Powinieneś trochę wyjaśnić; chcesz, aby każdy pojedynczy pakiet automatycznie zawierał plik parameters.yml? Obawiam się, że musisz zmodyfikować rdzeń DI Symfony. Istnieje jednak prosta alternatywa.

Jeśli utworzysz własny pakiet o numerze DependencyInjection, możesz dodać $loader->load('parameters.yml'); w klasie rozszerzenia pakietu.

Klasa rozszerzenia powinna znajdować się w YourBundle/DependencyInjection/YourBundleExtension.php.

Klasa powinna wyglądać następująco

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 
    } 
} 

Więc w tym przypadku plik parameters.yml byłoby YourBundle/Resources/config/parameters.yml.

+0

Myślę, że kolejność importu ma znaczenie. Jeśli 'services.yml' wymaga pewnych parametrów zdefiniowanych w' parameters.yml', możesz napotkać pewne kłopoty, ponieważ te nie są jeszcze znane. Czy widzę to w niewłaściwy sposób? – UrGuardian4ngel

+0

Po prostu próbowałem i zadziałało; możliwe jest użycie parametru z pliku załadowanego później. Domyślam się, że Symfony kompiluje plik konfiguracyjny później, gdy wszystkie parametry zostały scalone i zdublowane. Jednak wydaje się, że nie działa on w różnych pakietach. –

+0

A jak mogę dodać to również do konfiguracji doktryny (więc otrzymuję nowe połączenie) –

2

Jeśli chcesz tylko dołączyć plik parametrów z pakunku do konfiguracji, postępuj zgodnie z normalnym formatem importowania dodatkowych plików konfiguracyjnych z pakietów (domyślna aplikacja pokazuje, jak to zrobić z routingiem). Zaktualizuj swój config to plik opcje tak:

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

Plik parametry powinny śledzić ten sam format jako domyślny:

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

, który działałby tylko dla pierwszego importu, ponieważ drugi import (z pakietu) zastąpiłby zawartość parametrów z pierwszego importu. zobacz dlaczego: https://github.com/symfony/DependencyInjection/blob/master/ParameterBag/ParameterBag.php#L120-123 – Michael

+0

To tylko nadpisuje poszczególne parametry o tej samej nazwie, a nie całej partii. W moim ograniczonym doświadczeniu z jednego projektu, z powodzeniem używam głównego parameters.yml i pakietu parameters.yml z obydwoma zestawami dostępnymi w aplikacji (chociaż mój drugi pakiet nie ma swoich własnych parametrów, nie spodziewałbym się, że wszelkie problemy, chyba że parametry zostały nazwane tą samą rzeczą). – DanielM

+0

Mh dziwne, próbowałem go z najnowszym 2.4.3 i nie było udane. Może to tylko ja robiłem coś złego. – Michael