adbacz
22.11.2017, 07:47:42
Mam taki dziwny dylemat, otóż w aplikacji ustawiam rodzaj środowiska [dev, test, prod] i w zależności od tego, chciałbym móc przestawiać cache itp. W chwili obecnej uruchamiając aplikację, tworze obiekt Kernel i przesyłam jej środowisko, jednak za każdym razem gdy potrzebuję tego użyć, to muszę przesłać do innych klas obiekt klasy Kernel co wydaje się troszkę dziwnym (IMO) podejściem, by pobrać tylko informacje o środowisku.
I tutaj pytanie, czy to jest poprawnie? Czy nie lepiej to zmienić na definiowaną stałą ENV i z niej korzystać w aplikacji? Jak Wy to robicie?
Pyton_000
22.11.2017, 08:42:54
Stała env + domyślnie jako prod.
Pilsener
22.11.2017, 14:30:18
Parametr ustawiający tego rodzaju tryb pracy jest ustawiany w konfiguracji serwera, .htaccess lub też ustawiany w samej aplikacji.
Jest to element jej konfiguracji, więc zależy od kontekstu aplikacji a ten powinien być dostępny wszędzie.
W symfony environment jest właściwością obiektu kernel i jest dodawany do worka parametrów, który z kolei łatwo jest dostępny z kontenera zależności:
$this->container->getParameter("kernel.environment");
adbacz
23.11.2017, 07:39:36
@Pilsener - Właśnie tak podobnie mam zrobione, jednak zastanawiam się czy to jest dobre rozwiązanie, by wszędzie tam gdzie potrzebuję tylko środowiska, przesyłać cały obiekt kontenera.
sabat24
23.11.2017, 10:27:32
Po pierwsze nie ma w tym nic złego. Po drugie możesz użyć stałej, definiowanej gdzieś w bootstrapie. Z innych Frameworków choćby Zend używa jednego i drugiego oraz umożliwia dostęp do zmiennej, środowiskowej z poziomu kontrolerów. Laravel ma od tego chyba funkcję statyczną dostępną globalnie, Kohana jak istniała miała stałą.
Po trzecie aż tak często potrzebujesz tej zmiennej w tak wielu miejscach? Mało kiedy spotkałem się z użyciem środowiska, gdzieś głębiej w logice aplikacji.
adbacz
23.11.2017, 10:48:55
No właśnie w logice aplikacji tego potrzebuję, by na przykład definiować jak ma działać cache dla Twiga czy routingu. Mam kilka takich miejsc i tak dziwnie mi to wyglądało, by cały Kernel przesyłać (bo tam to trzymam (narazie)).
sabat24
23.11.2017, 11:08:16
Ja to robię tak, że na podstawie środowiska ustawiam sobie odpowiednie configi i następnie pobieram już przetworzone dane z modułów typu Twig. Tyle, że moduły same dbają o pobieranie danych konfiguracyjnych. Jeśli to jest Symfony, to tam możesz ustawić sobie odpowiednie rzeczy w parametrach i później odczytać je z kontrolera przez $this->container->getParameter lub jak inny framework to zapewne istnieje jakaś obsługa configów. Tak czy tak może się nie obejść bez dependency injection, ale możliwe, że dasz radę to zrobić bardziej natywnie. Tu jest przykład dla Symfony:
https://stackoverflow.com/a/22599416/8962377
Pyton_000
23.11.2017, 11:14:47
Przecież w php jest getenv() i tego możesz używać.
Puszy
4.12.2017, 16:11:37
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.