CakePHP 3 で .env 使用時に LogicException が出たときの対応方法

はじめに

CakePHP 3 で構築した .env ファイルを使用しているシステムで、下記エラーが出た際に行った対応をご紹介します。

Fatal error: Uncaught LogicException: Key "●●●" has already been defined in getenv()
CakePHP
3.8.2
OS
Win10
Apache
2.4.39
PHP
7.3.4

解決方法

config/bootstrap.php の中に .env を読み込む下記コードがあります。

config/bootstrap.php
if (!env('APP_NAME') && file_exists(CONFIG . '.env')) {
  $dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']);
  $dotenv->parse()
      ->putenv()
      ->toEnv()
      ->toServer();
}

この中の putenv() の引数に true を与えたところ、エラーは出なくなりました。

config/bootstrap.php
  $dotenv->parse()
      ->putenv(true)  // ←ここを変更
      ->toEnv()

この解決策は、CakePHP3で使用している .env 読み込みのライブラリ「PHP Dotenv」のREADME.markdown を参考にしました。
(下記リンクから当該箇所を閲覧できます)

最初はエラーメッセージでググって試行錯誤してたのですが、なかなか解決策は見つからず。困ったらまずは公式ドキュメントに目を通しましょう!

でも、ついエラーメッセージで調べちゃうんだよなー笑