sql >> Databasteknik >  >> RDS >> Mysql

lavaral 5 FEL{ (SQLSTATE[HY000] [1045] Åtkomst nekad för användaren 'root'@'localhost' (med lösenord:YES)}

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.

Se dokumenten här.

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:

  1. 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.
  2. 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:

  1. 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.
  2. 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.


  1. NLS_UPPER() Funktion i Oracle

  2. Bästa sättet att lagra beställda listor i en databas?

  3. Konvertera hex till binär i MySQL

  4. Hur mycket RAM-minne behöver din nya databasserver?