Domyślnie laravel zakłada, że będziesz chciał mieć różne konfiguracje dla różnych środowisk. Np. w środowisku testowym możesz chcieć mieć inną nazwę użytkownika i hasło, a w środowisku produkcyjnym inne. Ponieważ laravel ma tak wiele plików konfiguracyjnych, zarządzanie nimi szybko staje się koszmarem. Dlatego laravel korzysta ze zmiennych środowiskowych PHP.
Zasadniczo mówi się, że jeśli chcesz użyć zmiennych "środowiskowych", których domyślnie używa laravel, musisz umieścić wszystkie swoje konfiguracje w env()
jak już wspomniano.
Jeśli nie chcesz tego robić, np. w przypadku prostych projektów po prostu usuń env z kodu, w ten sposób.
'mysql' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'laravel',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
Pamiętaj, że możesz mieszać i dopasowywać. tzn. możesz mieć niektóre zmienne w env, a niektóre samodzielne.
Dlaczego więc używać env
w ogóle?
Załóżmy, że Twoja aplikacja ma 100 testerów rozmieszczonych w różnych lokalizacjach. W laravelu musisz zakodować około 8-10 plików konfiguracyjnych. Musisz także version-control
te pliki. Masz więc dwa problemy:
- Nie chcesz wysyłać wszystkim 100 użytkownikom tych samych danych uwierzytelniających. Mogą również używać innej bazy danych, serwera pamięci podręcznej itp., co oznacza, że będą miały różne konfiguracje. Więc każdy użytkownik musi ręcznie utrzymywać te 8-10 plików konfiguracyjnych.
- Nie chcesz wysyłać tych plików konfiguracyjnych do kontroli wersji. Bo jeśli to zrobisz, cały świat pozna Twoje sekrety API i prawdopodobnie skorzysta z tego (podobnie jak hasło). Jeśli spojrzysz na pliki konfiguracyjne laravel, zauważysz, że są też inne informacje, takie jak strefa czasowa, właściwość debugowania itp., które również znajdują się w plikach konfiguracyjnych i chcesz je kontrolować. Jak więc kontrolować wersje takich plików konfiguracyjnych i nadal ukrywać poufne informacje.
Odpowiedź to env
zmienne. Laravel używa dotenv
którego dokumentację można znaleźć tutaj
. Zasadniczo są to zmienne, które znajdują się w jednym pliku o nazwie .env
w parze klucz-wartość. Np.
Przykładowa zawartość pliku .env
APP_DEBUG=false
APP_KEY=ABCDEFGH
...
Po zdefiniowaniu pliku .env w ten sposób, możesz uzyskać wartość za pomocą klucza, takiego jak env('APP_DEBUG')
.
Rozwiązuje to powyższy problem w następujący sposób:
- zachowujesz plik
.env
złożyć do siebie. Deklarujesz również inny plik o nazwie.env.example
który jest dokładną repliką oryginalnego pliku, z wyjątkiem tego, że zawiera wartości przykładowe, a nie wartości wrażliwe. Następnie przekazujesz wszystkim ten nowy przykładowy plik. Zastąpią przykładowe dane własnymi poufnymi informacjami. - Ponieważ kontrolujesz wersję przykładowego pliku, możesz kontrolować wersję wszystkich swoich plików konfiguracyjnych, ponieważ nie zawierają one klucza tajnego. Sekret znajduje się w plikach .env. Wszystkie te pliki konfiguracyjne zawierają wartości takie jak te
env('APP_KEY')
a rzeczywista wartość jest zastępowana w czasie wykonywania przy użyciu pliku .env.