[Laravel] Laravel では env() を config 系ファイル以外の場所に書いてはいけない

公開日:2018-10-15
最終更新:2018-10-24
※この記事は外部サイト(https://qiita.com/mpyw/items/34f37742d9a18...)からのクロス投稿です

説明するよりもフレームワークのコード読んでもらったほうが早いので掲載します。

framework/LoadEnvironmentVariables.php L12-L31

    /**
     * Bootstrap the given application.
     *
     * @param  \Illuminate\Contracts\Foundation\Application  $app
     * @return void
     */
    public function bootstrap(Application $app)
    {
        if ($app->configurationIsCached()) {
            return;
        }

        $this->checkForSpecificEnvironmentFile($app);

        try {
            (new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
        } catch (InvalidPathException $e) {
            //
        }
    }

.env ファイルの読み込みは, php artisan config:cache していない場合にしか行われません! キャッシュを有効にしてある場合, .env に書いてあるだけでシェルから起動する時点で定義されていない環境変数はすべて未定義になってしまうので注意しましょう。

要するに

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

こういう使い方はOKで,

class User extends Model
{
    public function debug(): string
    {
        if (env('APP_ENV', 'production') === 'production') {
            /* ... */
        } else {
            /* ... */
        }
    }
}

こういう使い方はダメだと言うことです。環境変数で分岐させたい場合は,一度必ずconfig/*.phpの中に落としましょう。

記事が少しでもいいなと思ったらクラップを送ってみよう!
36
+1
@mpywの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする