0

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

如何在 yii 中实现这一点?在 yii 中是 zend boostrap 的模拟吗?

UPD: db 是 mongo,使用 db 的 yii 扩展是directmongosuite

4

2 回答 2

1

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

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

    'components' => array('edms' => array('class' => 'EDMSConnection', 'dbName' => 'homeweb', 'server' => 'mongodb://localhost:27017', 'options' => 数组('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或执行父类的方法。

于 2012-06-25T11:34:32.137 回答
0

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

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

只要尝试获取应用组件,mongo插件如果无法打开连接就会抛出异常:

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

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

于 2012-06-24T09:00:31.290 回答