首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony6:用PHP (bootstrap.php)设置/更新/操作环境变量(APP_ENV)

Symfony6:用PHP (bootstrap.php)设置/更新/操作环境变量(APP_ENV)
EN

Stack Overflow用户
提问于 2022-05-05 13:17:26
回答 1查看 196关注 0票数 -3

我们正在将Symfony5应用程序重新加工为Symfony6。我们有一个特殊情况,即环境APP_ENV依赖于应用程序的主机名。

通过app1.domain.com和app2.domain.com访问同一个应用程序应该将symfony的APP_ENV变量设置为prod1或prod2。

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

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

bootstrap.php中的旧部分如下所示:

代码语言:javascript
复制
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");
  }
}

根据环境的不同,应用程序内部还会发生进一步的切换。

下列方法确实/没有起作用:

在服务器上设置环境变量(共享托管)不是possible

  • setting,它通过.htaccess无法工作,因为mod_rewrite只在请求事件(kernel.request)时将_REDIRECT__前置到所有环境(kernel.request),这太晚了,

  • 将其设置在.env中是static

  • setting,它在.env.local.php中是不更新保存的,因为这个文件是generated

  • running (一个导入的资源(导入)),config.yaml is中的一个导入资源(导入)似乎也不能工作

这个问题显然是关于切换环境,而不一定是一个解决方案!它的一个优点是,只要通过本地dev域访问,服务器上的dev环境中就可以运行相同的代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-06 06:11:44

我们使用的解决方案是将切换代码放入config/中的包含文件中,并在加载autoload_runtime.php之前和创建内核之前直接从autoload_runtime.php加载它。谢谢@Cerad让我们相信这一切都会好起来的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72127844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档