在yii中是否存在zend bootstrap analog?

时间:2012-06-24 07:18:48

标签: php zend-framework yii

我想尝试db连接来检查db是否可用。在zend中,我可以将我的代码放在boostrap文件中并将其包装在try catch中。

如何在yii中实现这一点? 在yii类似的zend boostrap?

UPD: db是mongo,yii使用db的延伸是directmongosuite

2 个答案:

答案 0 :(得分:1)

似乎我找到了合适的解决方案:

  1. 需要禁止配置文件中的自动连接:

    'components'=>阵列(         'edms'=>阵列(             'class'=> 'EDMSConnection',             'dbName'=> 'homeweb',             'server'=> 'MongoDB的://本地主机: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或执行父方法。

答案 1 :(得分:0)

yii中的bootstrap几乎是public_html下的index.php文件或yiic.php文件(用于命令行应用程序)。

您可能必须将应用程序实例的创建与运行它分开(默认情况下它在1行上执行),因此您可以在调用之间执行try / catch。

只是尝试获取应用程序组件,如果无法打开连接,mongo插件将抛出异常:

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

或Yii :: app() - > getComponent('mongoDb');