45
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Laravel】実装コード上で.envの値はconfig()で取得する

Posted at

環境

Laravel Framework: 8.56.0
PHP: 8.0

env()では、なぜダメなのか

同じく.envの値を取得できるものに、env()があります。

image001.png

これだけ聞くと、
config()でもenv()でも良いように感じますが、
特定状況下で動作させると、差が明らかになります。

その特定状況下というのが、
config:cacheを実行した環境になります。

config:cacheって何?

通常では、
設定情報や環境情報を参照する際は、
コールする度に読み込みに行くのですが、
これではパフォーマンス(実行速度)が落ちることがあります。

そのため、
そういった情報をキャッシュ化することで
読み込みに行く時間を短縮する訳です。

つまり、config:cacheを実行することで
結果的に、パフォーマンスが上がることに繋がります。

.envが読み込まれない

本番環境では、
パフォーマンスを向上させようとconfig:cacheを実行することがあります。

その状況で、
config()env()はキャッシュされた情報から取得しようとすると・・・、

config/*.phpの情報は取得できるのですが、
.envの情報は秘匿され、取得することができません

image002.png

結果として、
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の可能性あり

参考

45
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?