2013-04-04 56 views
6

我有一個腳本,它使Symfony2配置發生變化,並且在繼續(特別是添加dbal連接)之前需要知道新配置。有沒有辦法在腳本執行期間強制重新加載配置?在Symfony2中強制配置重載

+0

不知道這是否可能,這基本上意味着在運行腳本時必須重新初始化整個Service Container,如果可以在運行腳本時重新啓動內核,可以看一下app.php? – Hannes 2013-04-04 16:34:50

回答

10

更新:您不能重新加載配置,但你可以設置即時的參數,見第二個「更新」段落

這不是真的有可能在Symfony2中做到這一點。

在生產模式,一切(甚至配置)被緩存,所以你必須清除緩存與

app/console cache:clear --env=prod --no-debug

(也許後面是app/console cache:warmup --env=prod --no-debug

重新加載配置。在開發模式下,您可以試驗shutdown(),然後從Symfony\Component\HttpKernel\KernelloadClassCache開始boot() - 但所有這些都不是您想要的。

配置文件有什麼改變?也許你應該爲不同的環境使用不同的文件,或考慮使用其他方法來獲取這些更改(通過簡單的Web服務甚至從Controller中讀取靜態文件)。

更新

我想通了,你可以設置您的容器配置參數通過

$container->setParameter('parameter', value); 

上即時看一看the Symfony2 documentation

+0

我正在創建其他數據庫連接並將它們添加到config.yml文件(作爲多租戶設置的一部分)。 – 2013-04-09 07:28:50

+0

我剛剛更新了我的問題。這可能會幫助你。 – akluth 2013-04-10 11:04:12

5

我的答案很可能到達很晚,但可能對其他人有用。 「prod」環境的Symfony緩存存儲在「app/cache/prod /」文件夾中,幷包含很多內容(Twig模板在PHP中以「twig /」子文件夾翻譯,「annotations /」子文件夾中的註釋以及。 ..配置參數,應用* ProjectContainer.php文件,以及其他許多事情)。

所以你可以做的是:當你的配置腳本改變參數.yml時,它也可以刪除appProdProjectContainer.php。下一個擊中Symfony應用程序的用戶將面臨更長的響應時間,但新的配置參數將被考慮和緩存。