2013-09-16 68 views
0

有時我的應用程序無法連接到我的數據庫。Yii:如何捕獲錯誤並重定向,如果數據庫連接失敗

如何捕獲並重定向到統計頁面?

CDbConnection failed to open the DB connection: SQLSTATE[42000] [1049] Unknown database 'given_db'

+0

結束爲此,您需要從組件刪除在配置並手動激活它。其他方法(我不推薦它)更改open()函數,其中CDbConnection拋出異常。 – ineersa

+0

@ineersa:絕對不是。 – Jon

+1

@IonutFlaviusPogacian:Yii的錯誤處理機制可以毫無困難地處理這個問題。你有沒有[閱讀手冊](http://www.yiiframework.com/doc/guide/1.1/en/topics.error)? – Jon

回答

3

這不是最乾淨的解決方案,但您可以創建自定義DbConnection組件:

class DbConnection extends CDbConnection 
{ 
    public function open() 
    { 
     try { 
      parent::open(); 
     } catch(CDbException $e) { 
      Yii::app()->request->redirect(array('site/maintenance')); 
     } 
    } 
} 

,然後配置這是您的db組件:

'components' => array(
    'db' => array(
     'class' => 'DbComponent', 

缺點是:

  • 只會在網上工作,打破你的控制檯應用程序
  • 要求site/maintenance到絕對不含任何DB訪問或你無限重定向循環
+0

是的,我知道這一點,但我的應用程序內有問題;在我仔細觀察之後,事實證明,權限模塊弄亂了這些事情,因爲我的主控制器在某種程度上擴展了權限模塊,所以出現了一個循環,錯誤永遠不會發生;以同樣的方式,這次與基本的控制器,它就像一個魅力 –

+0

如何在Yii2中捕捉這個?我嘗試但不工作! – Tchaps

-1

你可以在下面設置組件陣列

'cache' => array('class' => 'system.caching.CDbCache'), 
+0

它將如何幫助捕捉建立CDbConnection的錯誤? – ineersa

相關問題