デフォルトでは、laravelは環境ごとに異なる構成が必要になることを前提としています。例えば。テスト環境では、別のユーザー名とパスワードを使用し、本番環境では別のユーザー名とパスワードを使用することをお勧めします。 laravelには非常に多くの構成ファイルがあるため、それらすべてを管理することはすぐに悪夢になります。したがって、laravelはPHPの環境変数を利用します。
基本的に言うと、laravelがデフォルトで使用する「環境」変数を使用する場合は、すべての構成をenv()
に配置する必要があります。 すでに述べた方法。
これを望まない場合、例えば単純なプロジェクトの場合は、次のようにコードからenvを削除するだけです。
'mysql' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'laravel',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
組み合わせることができることに注意してください。つまり、env内のいくつかの変数と、いくつかのスタンドアロンを持つことができます。
では、なぜenv
を使用するのですか? まったく?
アプリケーションに100個のテスターがすべて異なる場所に配置されているとします。 Laravelでは、約8〜10個の構成ファイルをコーディングする必要があります。また、version-control
する必要があります それらのファイル。したがって、手元に2つの問題があります。
- 100人のユーザー全員に同じ資格情報を送信したくない。また、異なるデータベースやキャッシュサーバーなどを使用する場合もあります。つまり、異なる構成になります。したがって、すべてのユーザーはこれらの8〜10個の構成ファイルを手動で管理する必要があります。
- これらの構成ファイルをバージョン管理に送信したくない場合。そうすれば、全世界があなたのAPIシークレットを知っており、おそらくそれを利用するでしょう(パスワードのように)。また、laravel confファイルを見ると、タイムゾーンやデバッグプロパティなど、confファイルにも含まれている他の情報があり、それらをバージョン管理する必要があることに気付くでしょう。では、このような構成ファイルをバージョン管理し、機密情報を非表示にするにはどうすればよいでしょうか。
答えはenv
です 変数。 Laravelはdotenv
を使用します その.env
と呼ばれる1つのファイルに存在する変数です。 キーと値のペアで。例:
.envファイルのサンプルコンテンツ
APP_DEBUG=false
APP_KEY=ABCDEFGH
...
.envファイルをこのように定義すると、env('APP_DEBUG')
などのキーを使用して値を取得できます。 。
したがって、これは上記の問題を次の方法で解決します。
-
.env
を保持します 自分にファイルします。また、.env.example
という別のファイルを宣言します これは、機密値ではなくサンプル値が含まれているという事実を除いて、元のファイルの正確なレプリカです。次に、この新しいサンプルファイルを全員に渡します。サンプルデータを独自の機密情報に置き換えます。 - サンプルファイルをバージョン管理しているので、シークレットが含まれていないため、すべてのconfファイルをバージョン管理できます。その秘密は.envファイルにあります。これらのconfファイルに含まれるのは、これらの
env('APP_KEY')
のような値です。 実際の値は、実行時に.envファイルを使用して置き換えられます。