2011-09-09 5 views

Odpowiedz

6

Aby złapać wszystkie błędy CDbConnection trzeba włączyć funkcję obsługi błędów w config/main.php

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

Następnie w ciągu kontrolera (lub abstrakcyjnej klasy bazowej dla wszystkich kontrolerów), należy zdefiniować czynność do wykonania przekierowania.

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(); } 

Alternatywnie można po prostu uczynić swoje poglądy niestandardowe:

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

Zobacz Yii docs więcej szczegółów.

+2

Piękne podejście –

+2

dlaczego nie tylko uprościć do: if ($ error = Yii :: app() -> errorHandler-> error && CDbException == $ error-> type) {...} ??? – Fydo

+0

@Fydo: tak, to powinno działać tak samo. Ale wolę pythonic PHP;) (wyraźne, czytelne, znaczące wcięcia, itp.) – hobs

1

można zrobić coś takiego:

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

można również przekazać dodatkowe informacje z przekierowaniem, zobacz here.