2012-06-24 58 views
0

我想嘗試db連接來檢查db是否可用。在zend中,我可以將我的代碼放在boostrap文件中並將其包裝在try catch中。在yii中是否有zend bootstrap模擬?

如何在yii中實現這個? 是在yii類似的zend boostrap?

UPD:分貝是蒙戈,警予extention與DB工作是directmongosuite

回答

1

似乎我找到合適的解決方案:

  1. 需要禁止自動在配置文件連接:

    '分量'=>數組( 'EDMS'=>數組( '類' =>'EDMSConnection', 'dbName'=>'homeweb', 'server'=>'mongodb:// localhost:27017', 'options'=> array('connect'=> false) ) )

  2. 所有控制器都應該擴展一個自定義控制器(例如BaseController)。

  3. 需要編寫自己的public function beforeAction方法,我可以添加boostrap代碼。

    class BaseController extends CController 
    { 
        public $layout = '//layouts/main'; 
        public $navigationMenu = array(); 
        public $breadcrumbs = array(); 
    
        public function beforeAction($action) 
        { 
         try { 
          Yii::app()->edmsMongo()->connect(); 
         } catch (Exception $e) { 
          die('Cannot connect to the database server. Please Try again later.'); 
         } 
         $isGuest = Yii::app()->user->isGuest; 
         $this->navigationMenu = $this->_getNavigationMenu($isGuest); 
         return parent::beforeAction($action); 
        } 
    
  4. beforeAction方法需要添加return true或執行父母的方法。

0

在警予的引導是非常下的index.php文件的public_html或yiic.php文件(命令行應用程序)。

您可能需要單獨創建應用程序實例並運行它(默認情況下,它同時在1行上),因此您可以在調用之間執行try/catch操作。

只是嘗試獲取應用程序組件,蒙戈插件將拋出一個異常,如果它不能打開的連接:

try 
{ 
    Yii::app()->mongoDb; 
} 
... 

或Yii的應用::() - > getComponent(「的MongoDB」) ;