【Laravel】.envの値が取得できない原因

前提

環境;Laravel5.5

この記事は以下の人に読んでいただきたいです。

  • env関数でnullが返ってきて困る
  • ソースを触らなくても返す値が異なる挙動について知りたい
  • Laravelのenv関数、config関数の使い方を知りたい

エラー内容

.envにAPP_NAMEを定義していたところ、

env('APP_NAME');

上記でnullが返ってくるようになってしまった。

原因

設定ファイルをキャッシュすると、env関数はnullを返してしまう。

php artisan config:cache

日本語ドキュメント

開発期間中にconfig:cacheコマンドを実行する場合は、設定ファイルの中で必ずenv関数だけを使用してください。設定ファイルがキャッシュされると、.envファイルはロードされなくなり、env関数の呼び出しは全てnullを返します。

// 前提として
// .envにAPP_NAME=PHPを設定している場合

// 設定ファイルがキャッシュされていない場合
env('APP_NAME');            // PHP
env('APP_NAME', '題名');    // PHP

// 設定ファイルがキャッシュされている場合
env('APP_NAME');            // null
env('APP_NAME', '題名');    // 第2引数の題名

対策

対策としては、configファイルでenv関数を使えば解決です。

return [
    'name' => env('APP_NAME', '題名'),
    'env' => env('APP_ENV', 'production'),
    'debug' => env('APP_DEBUG', false),
    // ...
//アクセス方法

config(app.name)

一般的にはキャッシュされている場合が多いかと思います。

ただし、このように設定ファイルをキャッシュするとnullが返ってエラーが発生するパターンもあるので、コード上ではconfig関数を利用したほうが無難です。

コメント

タイトルとURLをコピーしました