web-dev-qa-db-ja.com

env( 'APP_ENV')、config( 'app.env')、またはApp :: environment()を使用してアプリ環境を取得する違いは何ですか?

env('APP_ENV')config('app.env')、またはApp::environment()を使用してアプリ環境を取得する場合の違いは何ですか?

env('APP_ENV')は_$_ENV_になり、config('app.env')は設定を読み取り、App::environment()はすべての抽象化であることを知っています。そして私の意見では、利点はこれですらあります。 抽象化

パフォーマンスやセキュリティのレベルなど、他の違いがあるかどうかはわかりません

13
Miguel Borges

2019年の短期間で最新:
-設定ファイルでのみenv()を使用します
-環境のチェックにApp :: environment()を使用します(.envのAPP_ENV)。
-他のすべてのenv変数にconfig( 'app.var')を使用します。 config( 'app.debug')
-独自のENV変数用に独自の構成ファイルを作成します。例:
。envで:

MY_VALUE=foo

config app/myconfig.phpの例

return [
    'myvalue' => env('MY_VALUE', 'bar'), // 'bar' is default if MY_VALUE is missing in .env
];

コードにアクセスします。

config('myconfig.myvalue') // will result in 'foo'

説明と履歴:

私はちょうどそれを感じました。構成ファイルをキャッシュすると、env()は(時々?)正しく動作しません。だから私が見つけたもの:

  1. Laravelは設定ファイル内でenv()のみを使用することを推奨します。コードでenv()の代わりにconfig()ヘルパーを使用します。たとえば、コードでconfig( 'app.env')を呼び出すことができます。
  2. Php artisan config:cacheを使用すると、すべての構成文字列がフレームワークによってキャッシュされ、php artisan config:cacheコマンドを再度実行するまで、.envファイルに加えた変更はアクティブになりません。

ここから: https://laracasts.com/discuss/channels/general-discussion/env-not-reading-variables-sometimes

UPDATE:
env()呼び出しは、php artisan config:cacheを使用しない限り機能します。そのため、開発中に機能することが多いため、本番環境では失敗しますため、非常に危険です。アップグレードガイドを参照してください: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.

UPDATE Laravel 5.6:
Laravelでは、 ドキュメント での使用を推奨しています。

$environment = App::environment();

describes env()は、config( 'app.env')やconfig( 'app.debug')などの構成ファイルの.envから値を取得するだけです。

19
ndberg

展開中にconfig:cacheコマンドを使用している場合は、アプリケーションの他の場所からではなく、構成ファイル内からのみenv関数を呼び出していることを確認する必要があります。

アプリケーション内からenvを呼び出す場合、適切な構成値を構成ファイルに追加し、代わりにその場所からenvを呼び出して、env呼び出しをconfig呼び出しに変換できるようにすることを強くお勧めします。

次のようなapp.php構成ファイルにenv構成オプションを追加します。

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

詳細: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.

1
Adam Kozlowski

考慮すべき1つのことは、おそらく現在の環境を検証するためにapp()->environment()に文字列を渡す便利な要因です。

// or App:: whichever you prefer.
if (app()->environment('local', 'staging')) {
    logger("We are not live yet!");
    Seeder::seedThemAll();
} else {
    logger("We are LIVE!");
}
1
JofryHS

12ファクター方法論 アプリケーションには、2種類の構成値が含まれます。

  • デプロイ間で変化せず、laravel _./config/_フォルダーに保存されます。このタイプでは、通常、ユーザーが変更してはならないアプリケーションで使用される技術的な最適/適切な値を保存します時間。たとえば、最適な画像圧縮レベル、接続タイムアウト、セッションの有効期限など。
  • デプロイ間で異なり、_.env_ファイルに格納されるexternal(ただし、git repoには格納しないでください。ただし、詳細情報を含むサンプル値を持つ_.env.example_はrepoに格納できます)。このタイプでは、通常、ローカル環境に依存するいくつかの重要な/保護された値を保存します。パスワード、デバッグモード、データベースアドレスなど.

Laravelはこれに便利なアプローチを提案します

  • 通常のコードではconfig(...)ヘルパーのみを使用します(したがって、このレベルのプログラマーは、どの構成値が内部で、どの構成値が外部であるかを知る必要はありません)
  • 設定コードでは、外部設定値はenv(...)ヘルパーを使用して設定する必要があります。 config/app.php 'debug' => env('APP_DEBUG', false)
0

2つの同等に優れたオプションがあります

if (\App::environment('production')) {...}

または

if (app()->environment('production')) {...}

app()-> environment()は実際には Bugsnag で使用されています。ドキュメントを参照してください here

デフォルトでは、Laravelのアプリケーションインスタンスでenvironment()関数を呼び出すことで、アプリの環境を自動的に検出します。

0