Configurando Environment em Laravel 5 11

Primeiramente gostaria de dizer o quanto estou feliz com o lançamento do “Laravel 5” isso mostra o quanto devemos ter respeito pelo que esta sendo feito e também o quanto o FrameWork evoluiu.

Acredito que muitos ao baixarem o Laravel 5 se depararam com uma mudança no arquivo:

  • config/app.php

Na linha onde configurávamos um simples debug true agora existe uma chamada dessa forma:

  • env(‘APP_DEBUG’)

No Laravel 5 foi inserido uma forma de configurarmos diferentes valores com base no ambiente em que seu aplicativo será executado.

Sei que já era feito isso no 4.2 colocando a configuração de environment no arquivo:

  • bootstrap/start.php

Porém no 5 para tornar a edição mais efetiva e melhorar a segurança o Laravel iniciou a utilização da biblioteca DotEnv.

Essa biblioteca foi utilizado por que o ideal é que você não armazene suas configurações de credenciais sensíveis em seu código como era feito anteriormente em Laravel.

Existem algumas instalações do Laravel que podem conter o seguinte arquivo:

  • .env.example

Caso você tenha instalado o Laravel via Composer, o arquivo mencionado será automaticamente renomeado para:

  • .env

Mas também existe alguns casos que você deverá criar esse arquivo na raiz do projeto, caso seja necessário crie na raiz do projeto dessa forma, por exemplo:

  • sudo vi .env

Observação:

O arquivo .env no final das contas é uma maneira mais fácil de carregar variáveis de configuração personalizadas que o seu aplicativo irá precisar ter.

Isso significa que você terá que modificar o arquivo fora do projeto, e todas as variáveis de ambiente serão sempre definidas não importando como você execute seu código isso se reflete até em servidores embutidos do PHP.

Com o arquivo aberto em seu editor de texto coloque essas duas linhas:

  • APP_ENV=staging
  • APP_DEBUG=true

Explicação das variáveis:

  • Na primeira configuração eu coloquei uma pasta onde iremos copiar o arquivo app.php.
  • Na segunda configuração eu declarei que desejo habilitar o debug da minha aplicação.

Toda configuração criada no arquivo irá gerar uma chave e valor na global $_ENV do PHP, caso você não conheça a global $_ENV segue a documentação para mais detalhes:

Environment PHP

Agora iremos criar o arquivo de environment para a nossa aplicação no caminho:

  • bootstrap/environment.php

E coloque o seguinte código:

<?php

$env = $app->detectEnvironment(function()
{
 return getenv('APP_ENV') ?: 'production';
});

Como eu disse será criado o valor da APP_ENV na global $_ENV por isso foi utilizado a função: getenv

Essa função consegue pegar os valores de $_ENV e retornar.

O que fizemos é apenas uma verificação de se o valor de APP_ENV for diferente de production utilize, se não, utilize como produção.

Para verificar se a configuração esta correta executa em seu terminal:

php artisan env

O que deverá retornar se tudo ocorreu corretamente é:

  • Current application environment: staging

Eu fiz uma configuração com o nome de staging para que possamos testar a criação dessa pasta de configuração, agora iremos criar a pasta de staging:

  • config/staging

Copie o arquivo app.php para essa nova pasta ficando da seguinte forma:

  • config/staging/app.php

Para termos certeza de que esse arquivo esta sendo executado, após a configuração de debug crie mais um índice no array da seguinte forma:

  • ‘urls’ => ‘www.teste.com.br’,

Após a inserção do índice iremos testar nossa configuração.

Abra o arquivo de rota:

  • app/Http/routes.php

Coloque o seguinte código após as rotas: (/) e (home):

Route::get('/teste', function(){
echo 'Exibindo a URL: '.Config::get('app.urls'). '<br /> Para a environment: '.app()->environment();
});

Se exibir em sua tela a URL que configuramos e a environment de staging tudo esta correto.

Galera eu espero ter ajuda e caso vocês tenham algumas dúvida, por favor, postem que assim que possível tentarei responder.

Um grande abraço a todos.

  • Fabyo

    otimo tutorial, mas o correto ali é ‘url’ sem o ‘S’ Config::get(‘app.url’)

    valeu

    • Gustavo Rafael

      Fabyo, na verdade o autor criou mais um índice no Array para garantir que a configuração que estava sendo usada, era a do “config/staging/app.php” e não do “config/app.php”.

      • Fabyo

        Blz agora que vi, mas nem precisava se ele copiou o app para a pasta e quando dava o echo na url ja daria pra saber que era o ambiente certo, mas valeu

  • Fabyo

    Uma duvida, antes no laravel 4, o framework lia o app default + o app do seu ambiente, por exemplo ja vinha no laravel 4 o config/local/app.php

    https://github.com/laravel/laravel/blob/v4.2.11/app/config/local/app.php

    com isso eu configurava somente o que eu precisava no caso acima debug = true, só que no laravel 5 eu tentei criar um app.php no meu ambiente e deu um monte de erros, dai percebi e tive que copiar o app.php inteiro ou seja ele nao lê mais o app.php e passa a interpretar somente o app.php do seu ambiente

    como faço agora para configurar meus apps que só rodavam em dev?

    obrigado

    • http://douradinho.com/ Felipe Douradinho

      Cara, agora tá muito mais fácil. É só usar .env mesmo e criar um só /config/app.php. Dentro dele, você cria as chaves (mesmo que sejam personalizadas) disponíveis no seu .env e substituir o .env de preferência. O mesmo que você fez com a pasta “local”, agora, porém, o conceito é com o .env

  • Eduardo K

    Michael, uma duvida…. Após configurar os parâmetros em /config/database.php e quebrar a cabeça um pouco, descobri que teria que configurar novamente no .env. Pq isso? Pq configurar em dois lugares diferentes??
    Valeu! Abraço!!

    • Gustavo

      Mesma dúvida aqui..

    • Márcio França

      Na verdade, se você está especificando no .env não precisa informar no database.php, pois é feito referência as variáveis que você já especificou.

  • Wanderlei Borba Cordeiro

    como usar o .env quando eu tenho varias conexões de banco de dados?

  • Carlos Alexandre R Ramos

    Bom dia Galera.

    Estou com problemas para conectar o banco remotamente no laravel 5.4.

    se poderem me dar uma luz eu agradeço.

  • Adilson Calixto

    Estou com o seguinte problema: Instalo o Laravel 5.3 mas não aparece a página do laravel no localhost:8000. O que está havendo?