環境
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()
で取得することができます。
具体例
<?php
return [
'want-value' => env('WANT_VALUE'),
];
上記のconfig
を追加すれば、
以下のように呼び出すことができるようになります。
<?php
// これで取得できる
$value = config('sample.want-value');
// これは取得できないことがある
$value = env('WANT_VALUE'); // nullの可能性あり