Ve výchozím nastavení laravel předpokládá, že budete chtít mít různé konfigurace pro různá prostředí. Např. v testovacím prostředí možná budete chtít mít jiné uživatelské jméno a heslo a v produkčním prostředí jiné. Protože laravel má tolik konfiguračních souborů, rychle se stává noční můrou spravovat všechny tyto soubory. Laravel proto využívá proměnné prostředí PHP.
V podstatě se říká, že pokud chcete použít proměnné "environment", které laravel standardně používá, musíte všechny své konfigurace umístit do env()
jak již bylo zmíněno.
Pokud si to nepřejete, např. pro jednoduché projekty jednoduše odeberte env z kódu, jako je tento.
'mysql' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'laravel',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
Všimněte si, že můžete kombinovat. tj. můžete mít některé proměnné v env a některé samostatné.
Proč tedy používat env
vůbec?
Řekněme, že vaše aplikace má 100 testerů umístěných na různých místech. V laravelu musíte nakódovat přibližně 8-10 konfiguračních souborů. Také musíte version-control
ty soubory. Takže máte dva problémy:
- Nepřejete si poslat všem 100 uživatelům stejné přihlašovací údaje. Mohou také používat jinou databázi, cache server atd., což znamená, že budou mít různé konfigurace. Takže každý uživatel musí udržovat těchto 8-10 konfiguračních souborů ručně.
- Nepřejete si odesílat tyto konfigurační soubory do správy verzí. Protože pokud to uděláte, celý svět bude znát vaše tajemství API a možná toho využije (stejně jako heslo). Také pokud se podíváte na soubory laravel conf, všimnete si, že existují další informace, jako je časové pásmo, vlastnost ladění atd., které jsou také v souborech conf a chcete je řídit verzí. Jak tedy můžete spravovat verze takových konfiguračních souborů a přitom skrýt vaše citlivé informace.
Odpověď je env
proměnné. Laravel používá dotenv
jehož dokumentaci naleznete zde
. V podstatě se jedná o proměnné, které žijí v jednom souboru s názvem .env
v páru klíč–hodnota. Např.
Ukázkový obsah souboru .env
APP_DEBUG=false
APP_KEY=ABCDEFGH
...
Jakmile definujete svůj soubor .env takto, můžete získat hodnotu pomocí klíče jako takového env('APP_DEBUG')
.
Takže to řeší výše zmíněný problém následujícími způsoby:
- zachováte
.env
soubor k sobě. A také deklarujete další soubor s názvem.env.example
což je přesná replika původního souboru kromě skutečnosti, že obsahuje vzorové hodnoty, nikoli vaše citlivé hodnoty. Potom předáte tento nový vzorový soubor všem. Vzorová data nahradí svými vlastními citlivými informacemi. - Vzhledem k tomu, že řídíte verzi vzorového souboru, můžete ovládat verzi všech svých souborů conf, protože neobsahují tajný klíč. Tajemství je v souborech .env. Všechny tyto soubory conf obsahují hodnoty jako tyto
env('APP_KEY')
a skutečná hodnota je nahrazena za běhu pomocí vašeho souboru .env.