Symfony6:Set/update/manipulate 环境变量 (APP_ENV) 和 PHP (bootstrap.php)

Symfony6: Set/update/manipulate environment variables (APP_ENV) with PHP (bootstrap.php)

我们正在将 Symfony5 应用程序重新设计为 Symfony6。我们有一个特殊情况,其中环境 APP_ENV 取决于应用程序的 hostname

通过 app1.domain.comapp2.domain.com 访问同一个应用应该设置 APP_ENV symfony 变量 prod1prod2.

这曾经发生在 config/bootstrap.php(Symfony4 的遗迹),但这在 Symfony6 中不再可用。

在 Symfony 开始处理请求之前注入一些代码以切换变量的最佳更新保存位置在哪里?

bootstrap.php 中的旧部分看起来像这样:

if(isset($_SERVER['HTTP_HOST'])) {
  if(preg_match('#^app1\.domain\.com$#',$_SERVER['HTTP_HOST']))  { 
    $_SERVER['APP_ENV'] = "prod1"; $_ENV['env_name'] = "prod1";
    $_ENV['env_name'] = "production_client1";
  } elseif(preg_match('#^app2\.domain\.com$#',$_SERVER['HTTP_HOST']))  { 
    $_SERVER['APP_ENV'] = "prod2"; $_ENV['env_name'] = "prod2";
    $_ENV['env_name'] = "production_client2";
  } elseif(preg_match('#^app\.dev\.local$#',$_SERVER['HTTP_HOST']))  { 
    $_SERVER['APP_ENV'] = "dev"; $_ENV['env_name'] = "dev";
    $_ENV['env_name'] = "development";
  } else {
    die("invalid domain");
  }
}

根据环境,应用内会发生进一步的切换。

以下方法 do/did 无效:

这个问题明确是关于切换环境的,不一定是关于解决方法!一个很好的额外功能是相同的代码可以 运行 在服务器上的开发环境中,只需通过本地开发域访问它。

我们采用的解决方案是将切换代码放入 config/ 中的包含文件中,然后直接从 index.php[= 加载它15=] 在加载 autoload_runtime.php 之前和创建内核之前。感谢@Cerad 向我们保证这可能没问题。