前提
環境;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
関数を利用したほうが無難です。
コメント