Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przechowywanie danych o środowisku (dev, prod)
Forum PHP.pl > Forum > PHP
adbacz
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
Stała env + domyślnie jako prod.
Pilsener
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:
  1. $this->container->getParameter("kernel.environment");
adbacz
@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
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
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
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
Przecież w php jest getenv() i tego możesz używać.
Puszy
Tak jak mówi Pyton:

https://packagist.org/packages/vlucas/phpdotenv
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.