2012-06-24 39 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”) ;