2017-05-17 72 views
-1

我正在尋找任何方式來在維護支持期間禁用Symfony應用程序。我的意思是,在一個非常簡單的方式:在維護期間禁用symfony應用程序

1)我有一個應用程序,人們可以進入查看數據庫的信息。

2)管理員可以更改數據庫的信息。在這段時間內,數據庫信息不應該被訪問,因爲它已被刪除和更新。

3)我想要的是,如果在維護期間有任何方法阻止應用程序並將用戶(而不是管理員用戶)重定向到維護通知頁面。

我記得有一個全局函數可以重定向所有的URL,但我不太清楚。
在維護期間,我可以在數據庫中建立一個參數(或以任何其他方式),並要求這個值來知道應用程序是否處於維護期,重定向到正常的URL重定向到notive維護頁面。

+0

你到目前爲止嘗試過什麼?請有一個掠奪在http://stackoverflow.com/help/how-to-ask – PVitt

回答

0

如果您存儲在數據庫中的參數去知道如果管理員正在更新數據,那麼它使用內核請求聽衆相當簡單:在數據庫值

  • 測試
  • 如果管理員是當前用戶

see here : Events and event listeners

+0

嗨Youssef,我一直在嘗試這種方式和它的工作,但我的問題是否合理有事件監聽器的每個重定向在頁面,我的意思是在性能方面。這種方式需要訪問數據庫foreach頁面中的重定向。我可以將此參數保存在應用程序的任何參數中,以便在每次重定向時不向數據庫進行諮詢。我認爲在參數的任何參數中,yml,但是,我可以直接從Web界面更改此值嗎? – Angel

+0

如果您已經在使用它,您可以使用類似Redis的方式編寫值,然後當管理員完成更新數據庫時,您只需更新Redis值,以防您不使用Redis或類似的東西,在數據庫中的值應該是OK – Youssef

+0

一個問題...我怎麼能扔一個custon「exception」html頁面?我嘗試了事件監聽器,但最後它是不可能的,因爲在事件監聽器中,我重定向控制器以打印maintenance.html.twig,但在此重定向中,事件監聽器被遞歸調用.... – Angel

0

你可以做到這一點沒有改變任何項目的代碼,直接在Web服務器的配置。以下內容適用於NGINX(但謹慎使用,因爲if is evil),將其重現爲Apache應該沒有問題。

location/{ 

    # if the user is not you/an admin 
    if ($remote_addr != "your.ip.address") { 
    # return http code 503 (The server is currently unavailable (because it is overloaded or down for maintenance).) 
    return 503; 
    } 

    # otherwise, go ahead as usual 
    try_files $uri $uri/ /app.php?$is_args$args; 

} 

# show specific page when http code 503 
error_page 503 @maintenance; 
location @maintenance { 
    # which is maintenance.html 
    rewrite ^(.*)$ /maintenance.html break; 
} 

對我而言,IP檢查是一種快速解決方案。你也可以檢查特定的cookie等。這個想法保持不變:應用程序獨立於此。