我們正在將 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");
}
}
根據環境在應用程式內進行進一步的切換。
以下方法有效/無效:
- 無法在服務器(共享主機)上設定環境變數
- 通過.htaccess設定它不起作用,因為 mod_rewrite 將REDIRECT_添加到所有環境變數
- 訂閱者/偵聽器僅在請求事件 (kernel.request) 時附加,這為時已晚
- 在.env中設定它是靜態的
- 在.env.local.php中設定它不是更新保存,因為這個檔案是生成的
- 在config.yaml 中將檔案作為匯入資源 ( imports )運行似乎也不起作用
這個問題明確是關于切換環境,不一定是解決方法!這樣做的一個很好的額外功能是,只需通過本地開發域訪問相同的代碼就可以在服務器上的開發環境中運行。
uj5u.com熱心網友回復:
我們采用的解決方案是將切換代碼放入config/中的包含檔案中,并在加載autoload_runtime.php和創建內核之前直接從index.php加載它。感謝@Cerad 確保我們這可能沒問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471469.html
