在我的项目中,有一条CDb异常消息CDbCommand无法执行SQL陈述式:数据库状态[42S02]:未找到基表或视图:1146表'xxx.xxx'不存在当数据库表不存在时在网页上显示,在这里我想用客户页面来代替CDBexception页面,但是现在我发现Yii errorHandler不能捕获这个错误。那么,在YII框架中应该配置哪些附加配置?
biswetbf1#
发生此错误的最可能原因是您处理CDbexception的控制器也在onInit(),beforeAction()和/或HTML模板中抛出了一个新的CDbexception。为了防止这种“双抛出”,只需在抛出第二个异常的地方添加try-catch。
CDbexception
onInit()
beforeAction()
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,因此您需要在项目中使用它。你可以创建这样的方法:
site/error
public function actionError() { if($error=Yii::app()->errorHandler->error) $this->render('error', $error); }
型ps:代码来自yii指南!
2条答案
按热度按时间biswetbf1#
发生此错误的最可能原因是您处理
CDbexception
的控制器也在onInit()
,beforeAction()
和/或HTML模板中抛出了一个新的CDbexception
。为了防止这种“双抛出”,只需在抛出第二个异常的地方添加try-catch。cetgtptt2#
你可以做几件事:
1)用try catch包围可能抛出错误的代码:
字符串
2)使用内置错误处理程序
您可以在配置文件中激活它:
型
在配置中,我们使用了操作
site/error
,因此您需要在项目中使用它。你可以创建这样的方法:型
ps:代码来自yii指南!