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