Som standard antar laravel att du vill ha olika konfigurationer för olika miljöer. T.ex. i en testmiljö kanske du vill ha ett annat användarnamn och lösenord och i en annan produktionsmiljö. Eftersom laravel har så många konfigurationsfiler blir det snabbt en mardröm att hantera alla dessa. Därför använder laravel sig av PHPs miljövariabler.
Vad som i grund och botten säger är att om du vill använda "miljö"-variablerna, som laravel använder som standard, måste du placera alla dina konfigurationer i env()
metod som redan nämnts.
Om du inte vill göra detta, t.ex. för enkla projekt, ta helt enkelt bort env från din kod, så här.
'mysql' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'laravel',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
Observera att du kan mixa och matcha. dvs du kan ha några av variablerna i env och några fristående.
Så varför använda env
alls?
Låt säga att din applikation har 100 testare, alla placerade på olika platser. I laravel måste du koda cirka 8-10 konfigurationsfiler. Du måste också version-control
dessa filer. Så du har två problem till hands:
- Du vill inte skicka samma inloggningsuppgifter till alla 100 användare. De kan också använda olika databas, cacheserver, etc, vilket betyder att de kommer att ha olika konfigurationer. Så varje användare måste underhålla dessa 8-10 konfigurationsfiler för hand.
- Du vill inte skicka dessa konfigurationsfiler till versionskontroll. För om du gör det kommer hela världen att känna till dina API-hemligheter och kanske dra nytta av det (precis som lösenord). Om du också tittar på laravel conf-filer kommer du att märka att det finns annan information som tidszon, debug-egenskap, etc som också finns i conf-filer, och du vill versionsstyra dem. Så hur versionskontrollerar du sådana konfigurationsfiler och fortfarande döljer din känsliga information.
Svaret är env
variabler. Laravel använder dotenv
vars dokumentation finns här
. I grund och botten är dessa variabler som finns i en fil som heter .env
i ett nyckel-värde-par. T.ex.
Exempel på .env-fil
APP_DEBUG=false
APP_KEY=ABCDEFGH
...
När du har definierat din .env-fil som denna kan du få värdet med nyckeln som sådan env('APP_DEBUG')
.
Så detta löser det ovan nämnda problemet på följande sätt:
- du behåller
.env
fil till dig själv. Och du deklarerar också en annan fil som heter.env.example
som är en exakt kopia av originalfilen förutom det faktum att den innehåller exempelvärden, inte dina känsliga värden. Sedan skickar du denna nya exempelfil till alla. De kommer att ersätta exempeldata med sin egen känsliga information. - Eftersom du versionskontrollerar exempelfilen kan du versionskontrollera alla dina conf-filer eftersom de inte innehåller hemligheten. Hemligheten ligger i .env-filer. Alla dessa conf-filer innehåller värden som dessa
env('APP_KEY')
och det faktiska värdet ersätts vid körning med din .env-fil.