Ich habe meiner Datei config.yml eine Einstellung als solche hinzugefügt:
app.config:
contact_email: somebody@gmail.com
...
Für mein Leben kann ich nicht herausfinden, wie ich es in eine Variable einlesen kann. Ich habe so etwas in einem meiner Controller versucht:
$recipient =
$this->container->getParameter('contact_email');
Aber ich bekomme eine Fehlermeldung:
Der Parameter "contact_email" muss definiert werden.
Ich habe meinen Cache geleert und auch überall in der neu geladenen Site-Dokumentation zu Symfony2 nachgesehen, kann aber nicht herausfinden, wie das geht.
Wahrscheinlich einfach zu müde, um das jetzt herauszufinden. Kann mir jemand dabei helfen?
symfony
configuration
josef.van.niekerk
quelle
quelle
swiftmailer: delivery_address: [email protected]
Weitere Informationen finden Sie im Symfony2-Kochbuch%parameter_name%
- Notation (in YAML)Wie in anderen Antworten vorgeschlagen
contact_email
,parameters.yml
ist die Lösung des Verschiebens von zwar einfach, kann jedoch Ihre Parameterdatei leicht überladen, wenn Sie mit vielen Bundles oder verschachtelten Konfigurationsblöcken arbeiten.ERSTER ANSATZ: Getrennter Konfigurationsblock, der als Parameter abgerufen wird
Mit einer Erweiterung ( mehr zu Erweiterungen hier ) können Sie diese einfach in verschiedene Blöcke in der "trennen"
config.yml
und diese dann als Parameter einfügen, der vom Controller abgerufen werden kann.DependencyInjection
Schreiben Sie in Ihrer Erweiterungsklasse im Verzeichnis Folgendes:Dann in Ihrer config.yml, config_dev.yml und so können Sie einstellen
Um dies
config.yml
in Ihrem verarbeiten zu können,MyNiceBundleExtension
benötigen Sie außerdem eineConfiguration
Klasse im selben Namespace:Dann können Sie die Konfiguration von Ihrem Controller erhalten, wie Sie es in Ihrer ursprünglichen Frage gewünscht haben, aber die Konfiguration
parameters.yml
sauber halten und in denconfig.yml
getrennten Abschnitten einstellen :ZWEITER ANSATZ: Separater Konfigurationsblock, der die Konfiguration in einen Dienst einfügt
Für Leser, die nach etwas Ähnlichem suchen, aber die Konfiguration von einem Dienst erhalten möchten, gibt es eine noch schönere Möglichkeit, die den gemeinsamen Raum der "Parameter" niemals überfüllt und nicht einmal
container
an den Dienst übergeben werden muss (das Übergeben des gesamten Containers ist üblich vermeiden).Dieser Trick oben "injiziert" immer noch in den Parameterraum Ihrer Konfiguration.
Trotzdem können Sie nach dem Laden Ihrer Definition des Dienstes einen Methodenaufruf wie beispielsweise hinzufügen
setConfig()
, der diesen Block nur in den Dienst einfügt.Zum Beispiel in der Erweiterungsklasse:
Dann
services.yml
definieren Sie in Ihrem Dienst Ihren Service wie gewohnt, ohne absolute Änderung:Und dann
SillyManager
fügen Sie in Ihrer Klasse einfach die Methode hinzu:Beachten Sie, dass dies auch für Arrays anstelle von Skalarwerten funktioniert! Stellen Sie sich vor, Sie konfigurieren eine Kaninchenwarteschlange und benötigen Host, Benutzer und Kennwort:
Natürlich müssen Sie Ihren Baum ändern, aber dann können Sie Folgendes tun:
und dann im Service tun:
Hoffe das hilft!
quelle
MyNiceProjectExtension->load()
Methode mit der folgenden Zeile in Parameter konvertiert :$container->setParameter( 'my_nice_project.contact_email', $processedConfig[ 'contact_email' ]);
. Danke Xavi!Ich muss der Antwort von Douglas hinzufügen, dass Sie auf die globale Konfiguration zugreifen können, aber symfony übersetzt einige Parameter, zum Beispiel:
sind
Mit var_dump können Sie einen bestimmten Schlüssel oder Wert suchen.
quelle
Um einige Konfigurationsparameter für Ihr Bundle verfügbar machen zu können, sollten Sie dazu die Dokumentation konsultieren. Es ist ziemlich einfach zu machen :)
Hier ist der Link: So legen Sie eine semantische Konfiguration für ein Bundle offen
quelle
Wie bereits erwähnt, können Sie mithilfe des Injektionscontainers auf alle Parameter zugreifen und deren Parametereigenschaft verwenden.
"Symfony - Arbeiten mit Container-Service-Definitionen" ist ein guter Artikel darüber.
quelle
Ich habe einen einfachen Weg aus dem Codebeispiel von http://tutorial.symblog.co.uk/ gelernt.
1) Beachten Sie das ZendeskBlueFormBundle und den Speicherort der Datei
2) Beachten Sie Zendesk_BlueForm.emails.contact_email und den Speicherort der Datei
3) Beachten Sie, wie ich es in $ Client und Dateispeicherort des Controllers bekomme
quelle