我想尝试数据库连接以检查数据库是否可用。在 zend 中,我可以将我的代码放在 boostrap 文件中并将其包装在 try catch 中。
如何在 yii 中实现这一点?在 yii 中是 zend boostrap 的模拟吗?
UPD: db 是 mongo,使用 db 的 yii 扩展是directmongosuite
我想尝试数据库连接以检查数据库是否可用。在 zend 中,我可以将我的代码放在 boostrap 文件中并将其包装在 try catch 中。
如何在 yii 中实现这一点?在 yii 中是 zend boostrap 的模拟吗?
UPD: db 是 mongo,使用 db 的 yii 扩展是directmongosuite
似乎我找到了合适的解决方案:
需要在配置文件中禁止自动连接:
'components' => array('edms' => array('class' => 'EDMSConnection', 'dbName' => 'homeweb', 'server' => 'mongodb://localhost:27017', 'options' => 数组('connect' => false) ) )
所有控制器都应该扩展一个自定义控制器(BaseController
例如)。
需要编写自己的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);
}
在beforeAction
方法中需要添加return true
或执行父类的方法。
yii 中的引导程序几乎是 public_html 下的 index.php 文件或 yiic.php 文件(用于命令行应用程序)。
您可能必须将应用程序实例的创建和运行分开(默认情况下,它都在 1 行上执行),因此您可以在调用之间进行 try/catch。
只要尝试获取应用组件,mongo插件如果无法打开连接就会抛出异常:
try
{
Yii::app()->mongoDb;
}
...
或者 Yii::app()->getComponent('mongoDb');