Umieściłem kilka zmiennych niestandardowych w moim app / config / parameters.yml.
parameters:
api_pass: apipass
api_user: apiuser
Muszę uzyskać do nich dostęp z mojego kontrolera i próbowałem je pobrać za pomocą
$this->get('api_user');
z mojego pliku kontrolera. Kiedy próbuję, otrzymuję ten komunikat o błędzie:
You have requested a non-existent service "api_user".
Jaki jest właściwy sposób, aby to zrobić?
symfony
symfony-2.3
Bohr
źródło
źródło
get
metoda w kontrolerze również używa kontenera, ale może pobierać usługi tylko z kontenera, a nie parametry. MusiszgetParameter
uzyskać parametry.$this->getContainer()->getParameter('api_user');
, otrzymuję błąd krytyczny: wywołanie niezdefiniowanej metody ..Longpath .. \ Controller :: getContainer ().$this->hasParameter()
jeszcze nie działa.Czysty sposób - 2018+, Symfony 3.4+
Od 2017 i Symfony 3.3 + 3.4 istnieje znacznie czystszy sposób - łatwy w konfiguracji i obsłudze.
Zamiast używać kontenera i anty-wzorca lokalizatora usługi / parametrów, możesz przekazać parametry do klasy za pośrednictwem jej konstruktora . Nie martw się, nie jest to czasochłonna praca, ale raczej konfiguracja raz i zapomnij .
Jak to ustawić w 2 krokach?
1.
app/config/services.yml
2. Dowolne
Controller
Gotowe do natychmiastowej aktualizacji!
Jeśli korzystasz ze starszego podejścia, możesz je zautomatyzować za pomocą Rectora .
Czytaj więcej
Nazywa się to podejściem wstrzykiwania konstruktora do lokalizatora usług .
Aby dowiedzieć się więcej na ten temat, zajrzyj do mojego postu Jak uzyskać parametry w kontrolerze Symfony w czysty sposób .
(Jest przetestowany i aktualizuję go pod kątem nowej głównej wersji Symfony (5, 6 ...)).
źródło
Przesyłam Ci przykład ze swiftmailer:
parameters.yml
usługi:
klasa usługi:
źródło
W Symfony 4 możesz użyć
ParameterBagInterface
:i w
app/config/services.yaml
:U mnie działa zarówno w klasach kontrolerów, jak i formularzy. Więcej szczegółów można znaleźć na blogu Symfony .
źródło
$meetupApiKey
, wiem, czego się spodziewać nieco lepiej niż w$parameterBag
Możesz użyć:
Aby uzyskać więcej informacji, przeczytaj dokument:
http://symfony.com/doc/2.8/service_container/parameters.html
źródło
W Symfony 4.3.1 używam tego:
services.yaml
FrontController.php
źródło
$this->getParameter('foo')
. Właśnie to zrobiłem, aby działało w SF 4.8.Możesz także użyć:
Odwiedź http://symfony.com/doc/current/service_container/parameters.html
źródło