Recentemente tive a necessidade de atualizar o arquivo .env do Laravel em tempo de execução da aplicação para armazenar e atualizar um token de uma API externa e utilizar banco de dados não era uma opção.
Você pode pensar na simplicidade dessa solução apenas reescrevendo o arquivo .env, mas vai se deparar com o fato do Laravel não atualizar o valor da chave e simplesmente incrementar o novo valor ao antigo.
MINHA_CHAVE=valorNovovalorAntigo
Solução
- Você deve se lembrar do comando
key:generate
, quando o framework faz a reescrita do .env para gerar uma chave para a nova aplicação, e é o código dele que vamos utilizar como referência para esta solução. Veja no código do repositório neste link; - Para que este código cumpra seu papel, precisamos adicionar a chamada
Artisan::call("config:cache");
. Você já deve conhecer este comando ;). Ele vai resetar o seu cache e combinar novamente os arquivos de configuração em um novo arquivo cacheado.
Método para alterar o arquivo .env
Indo diretamente ao ponto, nosso método ficará assim:
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Artisan;
...
public function atualizarArquivoPontoEnv($chave, $novoValor)
{
Artisan::call("config:cache");
$valorAntigo = env($chave);
$caminhoArquivoPontoEnv = App::environmentFilePath();
if (file_exists($caminhoArquivoPontoEnv)) {
file_put_contents($caminhoArquivoPontoEnv,
str_replace(
"{$key}={$valorAntigo}",
"{$key}={$novoValor}",
file_get_contents($caminhoArquivoPontoEnv)
)
);
}
}
E você, já teve necessidade de atualizar o arquivo .env em tempo de execução?