【Laravel】envファイルの値を動的に変更して使用する


概要

Laravelの.envファイルに何かしらの環境変数の保存場所を作り、動的に変更する方法をメモします。webアプリ内で共通の値を扱う場合などに有用です。

解決方法

「Laravel env 変更」とかでググると出てくるこちらの記事を参考に、コントローラーに記述するだけで変更できます。
まず、webアプリの.envファイルを開いて適当な環境変数を追加してみます。


APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
// 省略
TEST=0 // 追加

このままでも使う事が出来ますが、本番環境でも使うならconfig() 経由で使う必要があるので、config/app.php辺りに記述します。app.phpに限らず、config下の他のファイルに記述する事も可能です。


<?php

return [
    'TEST' => env('TEST'),
// 省略

その後、変更を行いたい部分で以下のようなコードを記述します。

// envファイルを書き換える
$path = base_path('.env');

if (file_exists($path)) {
   file_put_contents($path, str_replace(
    'TEST=' . config('app.TEST'),
    'TEST=' . //ここに変更したい値を記述,
    file_get_contents($path)
   ));
}

file_existsでenvファイルの存在を確認し、file_put_contentsでファイルに値を書き込んでいます。

値はconfig()で扱う事が可能です。

config('app.TEST')

これで値を自由に使う事ができます。
簡単に変えられると思いきや、意外と力技でした。

参考

Laravelの.envの値はconfig()経由で使う
Laravelで.envファイルの変数を動的に変更するにはどうすればよいですか?