データベース接続を試して、データベースが利用可能であることを確認したい。zend では、コードを boostrap ファイルに配置して、それを try catch でラップできます。
これを yii で実装する方法は? zend boostrap の yii アナログですか?
UPD: db は mongo です。db を操作するための yiiエクステンションはdirectmongosuite です
データベース接続を試して、データベースが利用可能であることを確認したい。zend では、コードを boostrap ファイルに配置して、それを try catch でラップできます。
これを yii で実装する方法は? zend boostrap の yii アナログですか?
UPD: db は mongo です。db を操作するための yiiエクステンションはdirectmongosuite です
適切な解決策を見つけたようです:
構成ファイルで自動接続を禁止する必要があります:
'components' => array( 'edms' => array( 'class' => 'EDMSConnection', 'dbName' => 'homeweb', 'server' => 'mongodb://localhost:27017', 'options' => array('connect' => false) ) )
すべてのコントローラーは、1 つのカスタム コントローラーを拡張する必要があります (BaseController
たとえば)。
public function beforeAction
ブーストラップ コードを追加できる独自のメソッドを作成する必要があります。
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 を実行できます。
app コンポーネントをフェッチしてみてください。接続を開けない場合、mongo プラグインは例外をスローします。
try
{
Yii::app()->mongoDb;
}
...
または Yii::app()->getComponent('mongoDb');