環境
Laravel Framework: 8.56.0
PHP: 8.0
env()では、なぜダメなのか
同じく.envの値を取得できるものに、env()があります。
これだけ聞くと、
config()でもenv()でも良いように感じますが、
特定状況下で動作させると、差が明らかになります。
その特定状況下というのが、
config:cacheを実行した環境になります。
config:cacheって何?
通常では、
設定情報や環境情報を参照する際は、
コールする度に読み込みに行くのですが、
これではパフォーマンス(実行速度)が落ちることがあります。
そのため、
そういった情報をキャッシュ化することで
読み込みに行く時間を短縮する訳です。
つまり、config:cacheを実行することで
結果的に、パフォーマンスが上がることに繋がります。
.envが読み込まれない
本番環境では、
パフォーマンスを向上させようとconfig:cacheを実行することがあります。
その状況で、
config()とenv()はキャッシュされた情報から取得しようとすると・・・、
config/*.phpの情報は取得できるのですが、
.envの情報は秘匿され、取得することができません。
結果として、
config()では取得できるが、env()では取得できないということになります。
解決方法
では、どうすればよいのか。
それは、configディレクトリに新たなファイルを作成し、
そのファイル内でenv()をコールして、
.envの情報をconfigに持たせることです。
これにより、config()で取得することができます。
具体例
config/sample.php
<?php
return [
'want-value' => env('WANT_VALUE'),
];
上記のconfigを追加すれば、
以下のように呼び出すことができるようになります。
実装している場所(コントローラなど)
<?php
// これで取得できる
$value = config('sample.want-value');
// これは取得できないことがある
$value = env('WANT_VALUE'); // nullの可能性あり
参考
Laravel の .env の値は config() 経由で使う
↧