2013-09-06 3 views
11

Bitte, stellt keine Verbindung zu How to expose a Semantic Configuration for a BundleZugriff auf eine Symfony 2-Bundle-Konfiguration von außerhalb des Bundles?

In der Tat, ich habe bereits ein voll funktionsfähiges Paket, mit vielen Konfigurationsmöglichkeiten. Das Bundle ist tatsächlich unter app/config.yml in einer eigenen Sektion konfiguriert. Ich habe bereits ein ConfigurationInterface mit seinem TreeBuilder und so weiter implementiert. Und ich bin in der Lage, die Config erfolgreich in das Bundle zu injizieren und im Bundle-Code zu verwenden.

Noch was ich tun möchte ist extrem einfach, aber obwohl ich eine fully working bundle veröffentlicht und mit Composer installierbar habe, habe ich mit Symfony 2 nur für ein paar Wochen gespielt, und wahrscheinlich ist die Antwort in der Tat lächerlich einfach ... aber ich weiß es nicht!

Wie kann ich über meinen App-Controller auf die Bundle-Konfiguration zugreifen?

Zum Beispiel ... ist dies die Config bei app/config.yml (wobei „Geräte“ hat Array Prototyp):

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

Wie kann ich diese Werte von der Steuerung einer App Zugriff auf das Bündel mit?

+0

Ich betrachtete die Konfiguration aus dem Inneren des Bündels aussetzt ... aber was ist, wenn ich nicht das Bündel Autor? (Außerdem möchte ich den Bündelcode wirklich nur ändern, um dies zu erreichen.) –

+0

Und ich möchte nur die Konfigurationswerte ** lesen **. –

+1

Es hängt davon ab, wie Sie den Konfigurationsersteller des Pakets implementiert haben - er setzt seine Parameter mit einem bestimmten Präfix voran. In Ihrem Fall könnte es so etwas wie 'my_bundle.devices' sein. Könnten Sie sonst den Code Ihrer DependencyInjection/MyBundleExtension.php posten? –

Antwort

9

Die ganze config in dem Parameter ausgesetzt wird paggy_boleto.config als verschachtelte Array. Um darauf zuzugreifen, in der Steuerung:

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

var_dump die Config, um zu sehen, wie Sie die Einträge in darauf zugreifen.

Wenn Sie Zugriff auf andere Bundle-Konfiguration benötigen, müssen Sie in den Bundles Extension-Klasse, wie sie die Konfiguration in den di Container offen legen. Ein Bündel wie das Ihre legt die gesamte Konfiguration offen, einige andere Bündel nicht (sie geben nur bestimmte Parameter an).

Im PaggyBaletoBundle ist dies die relevante line:

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

Danke! Ich weiß, es war einfach. Ich habe ein oder zwei Wochen mit Symfony 2 gespielt und bin dann zu Laravel + Angular.JS gewechselt, jetzt zurück zu Symfony 2 ... zu viel gleichzeitige Threads im Kopf! –

0

Sie sollten parameters.yml für diesen Zweck verwenden. und dann können Sie ganz einfach die Dinge in Ihrem Controller erhalten wie diese

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

Tatsächlich [email protected] zeigte auf die richtige Richtung ... und ich habe es schon verstanden: '$ this-> container-> getParameter ('paggy_boleto.config');' –

+0

parameter.yml funktioniert nicht, wenn Sie auf Semantik zugreifen müssen Bundle-Konfiguration. –

3

Es hängt davon ab, wie Sie Bundles Konfiguration Builder implementiert - es prepends seine Parameter mit einem bestimmten Präfix.

Nach your case ist es paggy_boleto.config

+0

+1 Du hast mir wirklich geholfen, dein Kommentar hat mich dazu gebracht, die Antwort zu "entdecken", bevor sie hier veröffentlicht wurde. Ich habe Pazi's akzeptiert, weil er eine detaillierte Antwort geschrieben hat, er hat nur 2.8k, während du schon 5k hast, und so weiter. Ich danke DIR sehr, und ich wünschte, ich könnte beide Antworten akzeptieren und Ihnen hundert Rep-Punkte geben. Eintausend! Also, die Punkte gehen an Pazi, aber du hast meine Dankbarkeit und meinen Segen! –

+0

@ J.Bruni Haha, danke Mann: D –

Verwandte Themen