我们正在将Symfony5应用程序重新加工为Symfony6。我们有一个特殊情况,即环境APP_ENV依赖于应用程序的主机名。
通过app1.domain.com和app2.domain.com访问同一个应用程序应该将symfony的APP_ENV变量设置为prod1或prod2。
这曾经发生在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");
}
}根据环境的不同,应用程序内部还会发生进一步的切换。
下列方法确实/没有起作用:
在服务器上设置环境变量(共享托管)不是possible
这个问题显然是关于切换环境,而不一定是一个解决方案!它的一个优点是,只要通过本地dev域访问,服务器上的dev环境中就可以运行相同的代码。
发布于 2022-05-06 06:11:44
我们使用的解决方案是将切换代码放入config/中的包含文件中,并在加载autoload_runtime.php之前和创建内核之前直接从autoload_runtime.php加载它。谢谢@Cerad让我们相信这一切都会好起来的。
https://stackoverflow.com/questions/72127844
复制相似问题