0

データベース接続を試して、データベースが利用可能であることを確認したい。zend では、コードを boostrap ファイルに配置して、それを try catch でラップできます。

これを yii で実装する方法は? zend boostrap の yii アナログですか?

UPD: db は mongo です。db を操作するための yiiエクステンションはdirectmongosuite です

4

2 に答える 2

1

適切な解決策を見つけたようです:

  1. 構成ファイルで自動接続を禁止する必要があります:

    'components' => array( 'edms' => array( 'class' => 'EDMSConnection', 'dbName' => 'homeweb', 'server' => 'mongodb://localhost:27017', 'options' => array('connect' => false) ) )

  2. すべてのコントローラーは、1 つのカスタム コントローラーを拡張する必要があります (BaseControllerたとえば)。

  3. 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);
        }
    
  4. メソッドで、親のメソッドbeforeActionを追加または実行する必要があります。return true

于 2012-06-25T11:34:32.137 に答える
0

yii のブートストラップは、ほとんど public_html の下の index.php ファイルまたは yiic.php ファイル (コマンドライン アプリケーションの場合) です。

おそらく、アプリケーション インスタンスの作成と実行を分離する必要があるでしょう (デフォルトでは、両方を 1 行で実行します)。そのため、呼び出しの間に try/catch を実行できます。

app コンポーネントをフェッチしてみてください。接続を開けない場合、mongo プラグインは例外をスローします。

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

または Yii::app()->getComponent('mongoDb');

于 2012-06-24T09:00:31.290 に答える