Nie chcę widzieć komunikatu o błędzie Yii, gdy połączenie z bazą danych nie powiedzie się. Jak mogę przekierować do określonej strony, gdy połączenie z bazą danych nie powiedzie się z frameworkiem Yii? Dzięki.Jak mogę przekierować do określonej strony, gdy połączenie z bazą danych nie powiedzie się w Yii?
6
A
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.
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.
Piękne podejście –
dlaczego nie tylko uprościć do: if ($ error = Yii :: app() -> errorHandler-> error && CDbException == $ error-> type) {...} ??? – Fydo
@Fydo: tak, to powinno działać tak samo. Ale wolę pythonic PHP;) (wyraźne, czytelne, znaczące wcięcia, itp.) – hobs