为什么yii errorhandler没有捕获CDbexception

1zmg4dgp  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(156)

在我的项目中,有一条CDb异常消息
CDbCommand无法执行SQL陈述式:数据库状态[42S02]:未找到基表或视图:1146表'xxx.xxx'不存在
当数据库表不存在时在网页上显示,在这里我想用客户页面来代替CDBexception页面,但是现在我发现Yii errorHandler不能捕获这个错误。
那么,在YII框架中应该配置哪些附加配置?

biswetbf

biswetbf1#

发生此错误的最可能原因是您处理CDbexception的控制器也在onInit()beforeAction()和/或HTML模板中抛出了一个新的CDbexception。为了防止这种“双抛出”,只需在抛出第二个异常的地方添加try-catch。

cetgtptt

cetgtptt2#

你可以做几件事:
1)用try catch包围可能抛出错误的代码:

try {
    //your sql code
} catch(CDbException $e) {
    // you redirect the user to the appropriate page, ...
}

字符串
2)使用内置错误处理程序
您可以在配置文件中激活它:

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


在配置中,我们使用了操作site/error,因此您需要在项目中使用它。你可以创建这样的方法:

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


ps:代码来自yii指南!

相关问题