Dodałem ustawienie do mojego pliku config.yml jako takie:
app.config:
contact_email: somebody@gmail.com
...
Przez całe moje życie nie mogę wymyślić, jak odczytać to w zmiennej. Próbowałem czegoś takiego w jednym z moich kontrolerów:
$recipient =
$this->container->getParameter('contact_email');
Ale pojawia się błąd z informacją:
Parametr „contact_email” musi zostać zdefiniowany.
Wyczyściłem pamięć podręczną, szukałem też wszędzie w dokumentacji przeładowanej witryny Symfony2, ale nie mogę się dowiedzieć, jak to zrobić.
Prawdopodobnie po prostu zbyt zmęczony, aby to teraz zrozumieć. Czy ktoś może w tym pomóc?
symfony
configuration
josef.van.niekerk
źródło
źródło
swiftmailer: delivery_address: [email protected]
Więcej informacji można znaleźć w książce kucharskiej Symfony2%parameter_name%
notacji (w YAML)Rozwiązanie przeniesienia
contact_email
doparameters.yml
jest łatwe, jak zaproponowano w innych odpowiedziach, ale może łatwo zaśmiecać plik parametrów, jeśli masz do czynienia z wieloma pakietami lub jeśli masz do czynienia z zagnieżdżonymi blokami konfiguracji.PIERWSZE PODEJŚCIE: Oddzielny blok konfiguracji, otrzymując go jako parametr
Z przedłużeniem ( więcej o rozszerzeniach tutaj ) możesz to łatwo „rozdzielić” na różne bloki w
config.yml
a następnie wstrzyknąć jako parametr gettable ze sterownika.Wewnątrz klasy Extension wewnątrz
DependencyInjection
katalogu napisz:Następnie w config.yml, config_dev.yml i możesz ustawić
Aby móc przetworzyć to
config.yml
w swoim wnętrzuMyNiceBundleExtension
, potrzebujesz równieżConfiguration
klasy w tej samej przestrzeni nazw:Następnie możesz uzyskać konfigurację ze swojego kontrolera, tak jak chciałeś w swoim pierwotnym pytaniu, ale utrzymując
parameters.yml
czystość i ustawiając ją wconfig.yml
w oddzielnych sekcjach:DRUGIE PODEJŚCIE: Oddzielny blok konfiguracji, wstrzykiwanie konfiguracji do usługi
Dla czytelników szukających czegoś podobnego, ale do uzyskania konfiguracji z usługi, istnieje jeszcze lepszy sposób, który nigdy nie zaśmieca wspólnej przestrzeni „parametrów”, a nawet nie potrzebuje
container
być przekazywany do usługi (przekazywanie całego kontenera jest praktyką uniknąć).Ta sztuczka powyżej nadal „wstrzykuje” do przestrzeni parametrów twojej konfiguracji.
Niemniej jednak po załadowaniu definicji usługi można dodać wywołanie metody, na przykład
setConfig()
wstrzykuje ten blok tylko do usługi.Na przykład w klasie Extension:
Następnie
services.yml
definiujesz swoją usługę jak zwykle, bez żadnych absolutnych zmian:A następnie w swojej
SillyManager
klasie po prostu dodaj metodę:Zauważ, że działa to również dla tablic zamiast wartości skalarnych! Wyobraź sobie, że konfigurujesz kolejkę królika i potrzebujesz hosta, użytkownika i hasła:
Oczywiście musisz zmienić swoje Drzewo, ale możesz zrobić:
a następnie w serwisie wykonaj:
Mam nadzieję że to pomoże!
źródło
MyNiceProjectExtension->load()
metody z tej linii:$container->setParameter( 'my_nice_project.contact_email', $processedConfig[ 'contact_email' ]);
. Dzięki, Xavi!Muszę dodać do odpowiedzi Douglasa, możesz uzyskać dostęp do globalnej konfiguracji, ale symfony tłumaczy niektóre parametry, na przykład:
są
Możesz użyć var_dump, aby wyszukać określony klucz lub wartość.
źródło
Aby móc ujawnić niektóre parametry konfiguracyjne pakietu, należy zapoznać się z dokumentacją. To dość łatwe do zrobienia :)
Oto link: Jak ujawnić konfigurację semantyczną dla pakietu
źródło
Tak jak wcześniej mówiono - można uzyskać dostęp do dowolnych parametrów za pomocą pojemnika do wstrzykiwań i użyć jego właściwości parametru.
„Symfony - Praca z definicjami usług kontenerowych” to dobry artykuł na ten temat.
źródło
Nauczyłem się w prosty sposób z przykładu kodu http://tutorial.symblog.co.uk/
1) zwróć uwagę na ZendeskBlueFormBundle i lokalizację pliku
2) powiadom Zendesk_BlueForm.emails.contact_email i lokalizację pliku
3) zauważ, jak dostaję go do $ klienta i lokalizacji pliku kontrolera
źródło