我想尝试db连接来检查db是否可用。在zend中,我可以将我的代码放在boostrap文件中并将其包装在try catch中。
如何在yii中实现这一点? 在yii类似的zend boostrap?
UPD: db是mongo,yii使用db的延伸是directmongosuite
答案 0 :(得分:1)
似乎我找到了合适的解决方案:
需要禁止配置文件中的自动连接:
'components'=>阵列( 'edms'=>阵列( 'class'=> 'EDMSConnection', 'dbName'=> 'homeweb', 'server'=> 'MongoDB的://本地主机:27017', 'options'=> array('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
或执行父方法。
答案 1 :(得分:0)
yii中的bootstrap几乎是public_html下的index.php文件或yiic.php文件(用于命令行应用程序)。
您可能必须将应用程序实例的创建与运行它分开(默认情况下它在1行上执行),因此您可以在调用之间执行try / catch。
只是尝试获取应用程序组件,如果无法打开连接,mongo插件将抛出异常:
try
{
Yii::app()->mongoDb;
}
...
或Yii :: app() - > getComponent('mongoDb');