Laravel config,envの正しい使い方

Laravel

環境 Windows10 Apache 2.4.47PHP7.4 Postgresql13.4 Laragon5.0.0 Laravel v8.59

参考サイト

以下のサイトに感謝です。
【Laravel】Configファイルから値を取得するやり方を解説します

マイルール

Laravelで定数を利用する時に使われるヘルパー関数がconfig()とenv()です。どちらも考え方としては似ていてファイルに値を定義するとプログラムのどこからでもその値を参照できるようになります。

envには環境毎に変更される可能性のある値(例えばDBの接続情報など)を設定して、configではシステムとして一意(例えばgoogleAPIのキーなど)で使い分けるのがよさそうです。

env()はconfigの中でしか使わない!

早速ですが、重要なので先に書いておきます。
Laravelではconfigに記述された値は性能向上のため、起動時にキャッシュ化する事が可能です。
Laravelの仕様上キャッシュを作成すると

  • config()→キャッシュを見に行く 速度アップ!
  • env()→キャッシュが作られないので null又はデフォルト値返却 想定外の動き!!

となりトラブルが発生しがちです。サーバでの性能向上施策でキャッシュ化などやりそうじゃありませんか?恐ろしいですね・・

上記が発生した場合は以下のコマンドでキャッシュをクリアすれば.envから読み込めるように戻すことが可能です。
★php artisan cache:clearではconfigファイルのキャッシュはクリアされないのでご注意ください

php artisan config:clear

config()が読み込む設定ファイルの書き方

configディレクトリ配下に定義ファイルを作成しましょう。
すでにLaravelで使用している設定ファイルがあるので重複しないように気をつける必要があるのですが後々システムの定義ファイルと混乱しないように別のファイルにする、いろいろ作るとこれも混乱しそうなので「project.php」としてプロジェクトで使う設定は全部このファイルに設定するようにしてみます。(マイルール)

<?php

return [
/*
通常にkeyで検索してvalueをとるパターン
*/
    'key1' => 'val1',
/*
keyで検索して配列をとるパターン
*/
    'key2' => [
        'sub_key1' => 'sub_val1',
        'sub_key2' => 'sub_val2',
    ],
/*
.envのデータを利用する場合
*/
    'env_key' => env('MENT_DIR'),
    ],
];

コメント

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