LoginSignup
12
9

More than 3 years have passed since last update.

【Laravel5】config:cacheした前と後での.envに定義した値の取得検証(config関数とenv関数)

Last updated at Posted at 2019-08-30

概要

環境ごとに値が変わるものは.envファイルに定義するのが多いと思います。
その際、.envファイルに定義した値を取得する際にはconfig以下のファイル経由での取得(config関数)することと書かれてますが、
たまにenv関数を使用してそのまま定義した値を取得する処理が書かれていることも多く見られるので、
それぞれの関数を使用して、config:cacheした後と前での.envの定義した値の取得検証をしてみます。

Configuration - Laravel - The PHP Framework For Web Artisans

設定値と確認方法

検証に使用したLaravelのバージョンは5.8.26です。
(環境はHomestead(8.6.0)を使用しました。)

また、基本的に.env以外はデフォルト値です。

.env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=**********************
config\app.php
<?php

return [

    // ~省略~

    /*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services the application utilizes. Set this in your ".env" file.
    |
    */

    'env' => env('APP_ENV', 'production'),

値の確認は以下のようにvar_dumpを使用

resources\views\layouts\app.blade.php
    var_dump(config('app.env'));
    var_dump(env('APP_ENV'));
    exit;

config:cache

まずconfig:cacheする前の値を取得してみます

FireShot Capture 392-1 - Laravel - 192.168.10.20.jpg

config:cacheする前はconfig関数で取得するとnullが帰ってくるようです。

※2019/09/04 追記

検証時はnullが返ってきたのですが、他環境(バージョンは異なる)ではデフォルト値(local)が返ってきました。
おそらく本来の動きとしては、デフォルト値(localが返ってくるのが正の動きです。

以下は別環境かつ別バージョンで検証した際のtinkerでの結果です。

WS000059.JPG

なので、nullが返るのは検証した際の環境がおかしかったかもしれません。(コメント欄も併せてご覧ください)

config:cache

以下のコマンドを実行して再度、値の確認をしてみます。

php artisan config:cache

FireShot Capture 393 - Laravel - 192.168.10.20.jpg

env関数の方はnullが返るようになりました。
そしてconfig:cache後はconfig関数の方は定義した値を取得できるようになりました。

config:cache後にconfig:clear

config:cache後に以下のコマンドを実行後、値の確認をしてみます

php artisan config:clear

FireShot Capture 394 - Laravel - 192.168.10.20.jpg

両方の関数で.envの定義した値を取得できました。

おまけ(.envファイルからAPP_ENV=local行を削除)

.envファイルからAPP_ENV=localを丸ごと削除した際に各関数を実行してみる。

.env
APP_NAME=Laravel

APP_KEY=**********************

以下tinker(laravel用REPL)で実行した際の様子

>>> var_dump(config('app.env'));
string(10) "production"
=> null
>>> var_dump(env('APP_ENV'));
NULL
=> null
>>>

結果、config関数config\app.phpで設定されている値を取得しますが、env関数はそのままnull返すようです。
この結果なのでどちらにしてもconfig関数使った方がよさそうですね。

おわり

  • config関数で定義値取得するように書いてた場合、config:cacheし忘れてたら大変なことになりそう

参考URL

12
9
2

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
12
9