为什么yii errorhandler没有捕获CDbexception

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

在我的项目中,有一条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包围可能抛出错误的代码:

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

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

  1. return array(
  2. ......
  3. 'components'=>array(
  4. 'errorHandler'=>array(
  5. 'errorAction'=>'site/error',
  6. ),
  7. ),
  8. );


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

  1. public function actionError()
  2. {
  3. if($error=Yii::app()->errorHandler->error)
  4. $this->render('error', $error);
  5. }


ps:代码来自yii指南!

展开查看全部

相关问题