sql >> Base de Datos >  >> RDS >> Mysql

lavaral 5 ERROR{ (SQLSTATE[HY000] [1045] Acceso denegado para el usuario 'root'@'localhost' (con contraseña:SÍ)}

Por defecto, laravel asume que querrá tener diferentes configuraciones para diferentes entornos. P.ej. en un entorno de prueba, es posible que desee tener un nombre de usuario y una contraseña diferentes y en un entorno de producción diferente. Dado que laravel tiene tantos archivos de configuración, administrarlos rápidamente se convierte en una pesadilla. Por lo tanto, laravel hace uso de las variables de entorno de PHP.

Vea los documentos aquí.

Lo que básicamente dice es que si desea utilizar las variables de "entorno", que laravel utiliza de forma predeterminada, debe colocar todas sus configuraciones en env() método como ya se mencionó.

Si no desea hacer esto, p. para proyectos simples, simplemente elimine el env de su código, así.

'mysql' => [
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'laravel',
        'username'  => 'root',
        'password'  => 'password',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

Tenga en cuenta que puede mezclar y combinar. es decir, puede tener algunas de las variables en env y algunas independientes.

Entonces, ¿por qué usar env? en absoluto?

Digamos que su aplicación tiene 100 evaluadores, todos ubicados en diferentes ubicaciones. En laravel, debe codificar aproximadamente 8-10 archivos de configuración. También necesita version-control esos archivos. Así que tienes dos problemas entre manos:

  1. No desea enviar las mismas credenciales a los 100 usuarios. También pueden usar diferentes bases de datos, servidores de caché, etc., lo que significa que tendrán diferentes configuraciones. Así que cada usuario tiene que mantener esos 8-10 archivos de configuración a mano.
  2. No desea enviar estos archivos de configuración al control de versiones. Porque si lo hace, todo el mundo conocerá los secretos de su API y posiblemente se aprovechará de eso (al igual que la contraseña). Además, si observa los archivos conf de laravel, notará que hay otra información, como la zona horaria, la propiedad de depuración, etc., que también se encuentran en los archivos conf, y desea controlar su versión. Entonces, ¿cómo controla la versión de dichos archivos de configuración y aún oculta su información confidencial?

La respuesta es env variables Laravel usa dotenv cuya documentación se puede encontrar aquí . Básicamente, estas son variables que viven en un archivo llamado .env en un par clave-valor. Por ejemplo

Contenido de muestra del archivo .env

APP_DEBUG=false
APP_KEY=ABCDEFGH
...

Una vez que defina su archivo .env como este, puede obtener el valor usando la clave como tal env('APP_DEBUG') .

Entonces esto resuelve el problema mencionado anteriormente de las siguientes maneras:

  1. te quedas con el .env archivo a ti mismo. Y también declaras otro archivo llamado .env.example que es una réplica exacta del archivo original, excepto por el hecho de que contiene valores de muestra, no sus valores confidenciales. Luego pasas este nuevo archivo de ejemplo a todos. Reemplazarán los datos de muestra con su propia información confidencial.
  2. Ya que está controlando la versión del archivo de ejemplo, puede controlar la versión de todos sus archivos conf porque no contienen el secreto. El secreto está en los archivos .env. Todos esos archivos conf contienen valores como estos env('APP_KEY') y el valor real se reemplaza en tiempo de ejecución usando su archivo .env.