![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
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? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Stała env + domyślnie jako prod.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
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:
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
@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.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) ![]() ![]() |
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)).
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
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
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Przecież w php jest getenv() i tego możesz używać.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.06.2025 - 13:24 |