Laravelがenvのコンテンツnullを取得する問題

1388 ワード

皆さんは、Laravel(app/configディレクトリの下のプロファイルを除く)でenv関数を使用して環境変数を読み取り、役に立つこともあればnullを返すこともありますが、いったいどうなっているのでしょうか.
Laravelプロジェクトでは、php artisan config:cacheコマンドを実行してプロファイルをキャッシュした後、Tinkerでプレゼンテーション(TinkerはLaravelが持参したインタラクティブなコマンドラインインタフェース)を行い、env関数を使用して環境変数の値をnullとし、php artisan config:clearを実行してプロファイルキャッシュをクリアするだけで読み取ることができます.これはなぜですか?
図:
原因は何ですか.Laravelでphp aritisan config:cacheコマンドを実行すると、Laravelはapp/configディレクトリの下のすべてのプロファイルをbootstrap/cache/configに「コンパイル」してキャッシュプロファイルに統合します.phpは、各プロファイルがenv関数で環境変数を読み込むことができます.ここでは読み取ることができます.しかし、このキャッシュプロファイルがあると、他の場所でenv関数を使用する環境変数は読み込めないためnullに戻る.
このコードを見てみましょうphp line 18:
public function bootstrap(Application $app)
{
    if (! $app->configurationIsCached()) {
        $this->checkForSpecificEnvironmentFile($app);

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

この方法はフレームワークが起動すると実行されます.このコードは、キャッシュプロファイルが存在する場合、環境変数を設定することはなく、環境変数を読み込むように構成され、環境変数を読むことはありません.
したがって、プロファイル、すなわちapp/configディレクトリの下の他の場所では、env関数を使用して環境変数を読むのではなく、php artisan config:cacheを実行するとenv関数は機能しません.使用するすべての環境変数は、app/configディレクトリのプロファイルでenvによって読み込まれ、他の場所で使用する環境変数はenv関数ではなくプロファイルを統一的に読みます.
この問題は以前出会ってから書き方を変えてgithubの上の拡張パッケージの中で1つのバグを発見して、発見もこの問題が招いたので、作者にフィードバックしてもこの点を確認します.