2013-09-06 17 views
11

Please, nie odwołuje się do How to expose a Semantic Configuration for a BundleJak uzyskać dostęp do konfiguracji pakietu Symfony 2 spoza pakietu?

w rzeczywistości, mam już w pełni pakiet roboczy, z wieloma opcjami konfiguracyjnymi. Pakiet jest rzeczywiście skonfigurowany na app/config.yml, w swojej własnej sekcji. Wcześniej zaimplementowałem ConfigurationInterface z TreeBuilder i tak dalej. I jestem w stanie z powodzeniem wstrzyknąć konfigurację w pakiecie i użyć go w kodzie pakietu.

Jednak to, co chcę zrobić, jest bardzo proste, ale mimo że mam fully working bundle opublikowany i możliwy do zainstalowania przy użyciu Composer, grałem z Symfony 2 tylko przez kilka tygodni, i prawdopodobnie odpowiedź jest wręcz śmiesznie prosta ... ale nie wiem!

Jak uzyskać dostęp do konfiguracji pakietu z poziomu kontrolera aplikacji?

Na przykład ... jest to config w app/config.yml (gdzie „urządzenia” ma prototypu array)

my_bundle: 
    format: standard 
    devices: 
     main: 
      color: yellow 
      capacity: 200 

Jak mogę uzyskać dostęp do tych wartości z kontrolera aplikacji przy użyciu wiązki?

+0

Uważałem narażając konfigurację od wewnątrz wiązki ... ale co jeśli nie był autorem pakiet? (Plus naprawdę nie chcę zmieniać kodu pakietu tylko po to, aby to osiągnąć.) –

+0

A ja chcę tylko ** odczytać ** wartości konfiguracyjne. –

+1

Zależy od tego, w jaki sposób zaimplementowałeś program do konfigurowania pakietów - dodaje parametry z pewnym prefiksem. W twoim przypadku może to być coś w stylu 'my_bundle.devices'. W przeciwnym razie, mógłbyś opublikować kod 'DependencyInjection/MyBundleExtension.php'? –

Odpowiedz

9

Cała konfiguracja jest narażony w parametrze paggy_boleto.config jako zagnieżdżonego tablicy. Aby uzyskać do niego dostęp, w kontrolerze:

$config = $this->container->getParameter('paggy_boleto.config'); 

var_dump config, aby zobaczyć, w jaki sposób uzyskać dostęp do wpisów w nim.

Jeśli potrzebujesz dostępu do innych pakietów, musisz zapoznać się z klasą rozszerzeń Pakiety, w jaki sposób udostępniają konfigurację w kontenerze. Niektóre pakiety podobne do twoich odsłaniają całą konfigurację, niektóre inne nie (ujawniają tylko określone parametry).

W PaggyBaletoBundle jest to istotne line:

$container->setParameter('paggy_boleto.config', $config); 
+0

Dzięki! Wiem, że to było proste. Grałem z Symfony 2 przez tydzień lub dwa, potem przełączyłem się na Laravel + Angular.JS, teraz wracam do Symfony 2 ... za dużo równoczesnych wątków w głowie! –

0

Do tego celu powinieneś użyć parameters.yml. a następnie można łatwo dostać rzeczy w kontrolerze jak ten

$parameters = $this->container->getParameter('devices'); 
+0

Rzeczywiście [email protected] thecatontheflat wskazał mi właściwy kierunek ... i już go otrzymałem: '$ this-> container-> getParameter ('paggy_boleto.config');' –

+0

parameters.yml nie zadziała, jeśli potrzebujesz dostępu do semantycznego konfiguracja pakietu. –

3

To zależy, w jaki sposób realizowane konfiguracji budowniczy Bundle za - to poprzedza jego parametry z określonym prefiksem.

Według your case jest paggy_boleto.config

+0

+1 Naprawdę mi pomogłeś, twój komentarz od samego początku sprawił, że "odkryłem" odpowiedź, zanim zostały tu opublikowane. Zgodziłem się na jeden z Pazi, ponieważ napisał szczegółową odpowiedź, ma tylko 2,8 tys. Powtórzeń, podczas gdy masz już 5k i tak dalej. Bardzo wam dziękuję i chciałbym móc przyjąć obie odpowiedzi i dać wam sto punktów rep. Tysiąc! Tak więc punkty trafiają do Pazi, ale macie moją wdzięczność i błogosławieństwo! –

+0

@ J.Bruni Haha, dziękuję człowieku: D –

Powiązane problemy