2011-09-09 4 views

Trả lời

6

Để bắt tất cả lỗi CDbConnection bạn cần phải kích hoạt một xử lý lỗi trong config/main.php

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

Sau đó, trong điều khiển của bạn (hoặc một lớp cơ sở trừu tượng cho tất cả các bộ điều khiển của bạn), bạn cần xác định một hành động để thực hiện chuyển hướng.

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

Hoặc bạn chỉ có thể làm cho quan điểm tùy chỉnh của bạn:

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

Xem Yii docs để biết thêm chi tiết.

+2

Phương pháp tiếp cận đẹp –

+2

tại sao không đơn giản hóa thành: if ($ error = Yii :: app() -> errorHandler-> error && CDbException == $ error-> type) {...} ??? – Fydo

+0

@ Fydo: yea sẽ hoạt động tương tự. Nhưng tôi thích pythonic PHP;) (rõ ràng, dễ đọc, thụt lề đáng kể, vv) – hobs

1

bạn có thể làm một cái gì đó như:

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

bạn cũng có thể vượt qua thông tin bổ sung với chuyển hướng, xem here.