問題が見つかりました
Laravel プロジェクトで、PHP のartisan config:cache コマンドを実行して設定ファイルをキャッシュする場合、Tinker (Tinker は Laravel に付属する対話型コマンドライン インターフェイスです) で、env 関数を使用して環境を読み取ります変数の値は null であり、phpArtisan config:clear を実行して設定キャッシュをクリアした後でのみ読み取ることができます。これはなぜですか?
調べてみましょう
.env ファイルを開いて見てください。これらはすべて貴重なものです:
APP_ENV=local APP_KEY=base64:JHE5bOkRg283uT0n1Zq/GgvGEer8ooYiB42/wIcCyvo= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://www.tanteng.me DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=tanteng.me DB_USERNAME=homestead DB_PASSWORD=secret
写真に示されているように:
理由は何ですか?
Laravel では、php aritisan config:cache コマンドを実行すると、Laravel は app/config ディレクトリ内のすべての設定ファイルを「コンパイル」し、各設定ファイルの bootstrap/cache/config.php へのキャッシュ設定ファイルに統合します。環境変数は env 関数を通じて読み取ることができます。この関数はここで読み取ることができます。ただし、このキャッシュ構成ファイルを取得すると、他の場所で env 関数を使用して環境変数を読み取ることはできないため、null が返されます。
このコード、Illuminate/Foundation/Bootstrap/DetectEnvironment.php 行 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 関数を使用して環境変数を読み取らないでください。このように、phpArtisan config:cache を実行すると、env 関数は機能しなくなります。使用されるすべての環境変数は、app/config ディレクトリ内の構成ファイル内の env を通じて読み取られます。環境変数が他の場所で使用されている場合、構成ファイルは env 関数を使用する代わりに一律に読み取られます。
概要
上記がこの記事の全内容です。この記事の内容が皆さんの学習や仕事に少しでも役立つことを願っています。ご質問がある場合は、メッセージを残して連絡してください。
Laravel で env 関数を使用して環境変数を null として読み取る問題について詳しく説明した関連記事については、PHP 中国語 Web サイトに注目してください。
関連記事: