Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

lavaral 5 ERROR{ (SQLSTATE[HY000] [1045] Acesso negado para usuário 'root'@'localhost' (usando senha:YES)}


Por padrão, o laravel assume que você desejará ter configurações diferentes para ambientes diferentes. Por exemplo. em um ambiente de teste, você pode desejar ter um nome de usuário e senha diferentes e em um ambiente de produção diferente. Como o laravel tem tantos arquivos de configuração, rapidamente se torna um pesadelo gerenciar todos eles. Portanto, o laravel faz uso das variáveis ​​de ambiente do PHP.

Veja os documentos aqui.

O que basicamente diz é que se você deseja usar as variáveis ​​"ambiente", que o laravel usa por padrão, você deve colocar todas as suas configurações no env() método como já mencionado.

Se você não deseja fazer isso, por exemplo, para projetos simples, basta remover o env do seu código, assim.
'mysql' => [
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'laravel',
        'username'  => 'root',
        'password'  => 'password',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

Observe que você pode misturar e combinar. ou seja, você pode ter algumas das variáveis ​​em env e algumas independentes.

Então, por que usar env afinal?


Digamos que seu aplicativo tenha 100 testadores, todos colocados em locais diferentes. Em laravel você tem que codificar aproximadamente 8-10 arquivos de configuração. Além disso, você precisa version-control esses arquivos. Então você tem dois problemas em mãos:
  1. Você não deseja enviar as mesmas credenciais para todos os 100 usuários. Além disso, eles podem usar banco de dados diferente, servidor de cache, etc., o que significa que eles terão configurações diferentes. Portanto, cada usuário precisa manter esses 8 a 10 arquivos de configuração manualmente.
  2. Você não deseja enviar esses arquivos de configuração para o controle de versão. Porque se você fizer isso, o mundo inteiro saberá seus segredos de API e possivelmente tirará vantagem disso (assim como a senha). Além disso, se você observar os arquivos laravel conf, notará que existem outras informações, como fuso horário, propriedade de depuração, etc., que também estão nos arquivos conf, e você deseja controlar a versão deles. Então, como você controla a versão desses arquivos de configuração e ainda oculta suas informações confidenciais.

A resposta é env variáveis. Laravel usa dotenv cuja documentação pode ser encontrada aqui . Basicamente estas são variáveis ​​que vivem em um arquivo chamado .env em um par chave-valor. Por exemplo.

Conteúdo de amostra do arquivo .env
APP_DEBUG=false
APP_KEY=ABCDEFGH
...

Depois de definir seu arquivo .env como este, você pode obter o valor usando a chave como tal env('APP_DEBUG') .

Portanto, isso resolve o problema mencionado acima das seguintes maneiras:
  1. você mantém o .env arquivo para si mesmo. E você também declara outro arquivo chamado .env.example que é uma réplica exata do arquivo original, exceto pelo fato de conter valores de amostra, não seus valores confidenciais. Então você passa esse novo arquivo de exemplo para todos. Eles substituirão os dados de amostra por suas próprias informações confidenciais.
  2. Como você está controlando a versão do arquivo de exemplo, você pode controlar a versão de todos os seus arquivos conf porque eles não contêm o segredo. O segredo está nos arquivos .env. Todos esses arquivos conf contêm valores como estes env('APP_KEY') e o valor real é substituído em tempo de execução usando seu arquivo .env.