Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przechowywanie danych o środowisku (dev, prod), Stała, właściwość klasy, inne możliwości?
adbacz
post 22.11.2017, 07:47:42
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?
Go to the top of the page
+Quote Post
Pyton_000
post 22.11.2017, 08:42:54
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.
Go to the top of the page
+Quote Post
Pilsener
post 22.11.2017, 14:30:18
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:
  1. $this->container->getParameter("kernel.environment");
Go to the top of the page
+Quote Post
adbacz
post 23.11.2017, 07:39:36
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.
Go to the top of the page
+Quote Post
sabat24
post 23.11.2017, 10:27:32
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.
Go to the top of the page
+Quote Post
adbacz
post 23.11.2017, 10:48:55
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)).
Go to the top of the page
+Quote Post
sabat24
post 23.11.2017, 11:08:16
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
Go to the top of the page
+Quote Post
Pyton_000
post 23.11.2017, 11:14:47
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ć.
Go to the top of the page
+Quote Post
Puszy
post 4.12.2017, 16:11:37
Post #9





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Tak jak mówi Pyton:

https://packagist.org/packages/vlucas/phpdotenv
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2025 - 13:24