2011-09-09 5 views

答えて

6

あなたはmain.php

'components'=>array('errorHandler'=>array('errorAction'=>'site/error',),), 

すると、お使いのコントローラ(またはすべてのコントローラの抽象基本クラス)の中にあなたが定義必要/ configにエラーハンドラを有効にする必要がありすべて CDbConnectionエラーをキャッチするために、リダイレクトを達成するアクション。

public function actionError() { 
    if($error=Yii::app()->errorHandler->error) 
     if (CDbException == $error->type) { 
      $this->redirect(array("site/error_message")); } 
    // call the parent error handler, but something doesn't feel right about this: 
    else 
     parent::actionError(); } 

代わりにあなたは自分のカスタムビューをレンダリングすることができます。

public function actionError() { 
    if($error=Yii::app()->errorHandler->error) 
     if (CDbException == $error->type) { 
      $this->render('error', $error); } } 

は詳細についてYii docsを参照してください。

+2

美しいアプローチ –

+2

なぜ単純化しないのですか?if($ error = Yii :: app() - > errorHandler-> error && CDbException == $ error-> type){...} ??? – Fydo

+0

@Fydo:同じように動作するはずです。しかし、私はpythonのPHPを好む;)(明示的、可読性、重要なインデントなど) – hobs

1

あなたが何かを行うことができます。

try { 
    $connection=new CDbConnection($dsn,$username,$password); 
} catch(Exception $e) { 
    $this->redirect(array('controller/action')); 
} 

をあなたもリダイレクトして、追加情報を渡すことができ、hereを参照してください。

関連する問題