2011-09-09 863 views

Respuesta

6

Para la captura de todos los errores CDbConnection necesita habilitar un controlador de errores en config/main.php

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

Entonces, dentro de su controlador (o una clase base abstracta para todos los controladores) que necesita definir una acción para lograr la redirección.

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

Alternativamente, usted puede simplemente hacer que sus puntos de vista personalizados:

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

Ver Yii docs para más detalles.

+2

Hermoso enfoque –

+2

¿por qué no simplificar a: if ($ error = Yii :: app() -> errorHandler-> error && CDbException == $ error-> type) {...} ??? – Fydo

+0

@Fydo: sí, eso debería funcionar igual. Pero prefiero PHP pythonic;) (explícito, legible, indentación significativa, etc.) – hobs

1

se puede hacer algo como:

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

también puede pasar información adicional con la redirección, consulte here.

Cuestiones relacionadas