【エラー備忘録】config関数を使って値を取得する / $ php artisan config cache


状況

Laravelのコントローラー内で、config関数を使い以下のコードを書いた。

HelloController.php
public function index()
    {
        $sample_msg = config('sample.message');
        $sample_data = config('sample.data');
        $data = [
            'msg' => $sample_msg,
            'data'=> $sample_data
        ];
        return view('hello.index', $data);
    }

このデータをビューで呼び出す。

index.blade.php
<p>{!!$msg!!}</p>
<ul>
@foreach($data as $item)
<li>{!!$item!!}</li>
@endforeach
</ul>

ここでブラウザにエラーが出た。

エラー文

Invalid argument supplied for foreach() 
(View: /Users/hinako/laravel_app/resources/views/hello/index.blade.php)

意味は、foreach文に渡された引数が間違っているもしくはNULLになっているという意味らしい。

原因

使用している変数をddやLog::debugでデバッグしてみた。
Log::debugでは値が変数に入っていると確認できたが、ddでブラウザに表示するとNULLになっていた。

解決策

変数に入っている値は問題なかったので、以下のコマンドを実行してみる。

$ php artisan config:cache

これでエラーは解消された。

しかし調べていると、このコマンドは安易に使用すると危ないらしい…。

理由は、config:cacheしてしまうと、env()はnullを返すようになる から。
つまり、設定ファイル(configディレクトリ以下のファイル)以外でenv()を直接使っている箇所がある場合、 .envが読み込まれないようになっているので、nullが返ってくるようになる。

この場合は、
・configに.envの加えたい値を追加する
・env()ではなく、config()を利用して値を取得する
のように対処する必要がある。

参考サイト
https://readouble.com/laravel/6.x/ja/configuration.html#configuration-caching