您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Yii框架官方指南系列46——专题:错误处理

2025/12/7 22:13:01发布21次查看
yii提供了一个完整的,基于php5异常处理的错误处理机制。当一个应用开始运行,进行用户请求的处理的时候,会注册handleerror方法来处理php warnings和notices信息;同时也注册加handleexception方法来处理未被捕获的php异常。因此,如果在应用运行期间出现一个php warning/notice 或者一个未捕获的php异常,错误处理器就会接过控制权来运行必要的处理机制。
提示: 错误处理器的注册是在应用中的constructor方法中进行的,使用了php函数set_exception_handler 和set_error_handler。 如果你不想让yii来处理错误和异常,你可以在入口文件中定义yii_enable_error_handler和yii_enable_exception_handler为false.
默认情况下,在触发onerror事件(或onexception事件)的时候,errorhandler(或exceptionhandler)将被触发。如果错误或者异常未被任何事件所处理,那么就需要运行errorhandler组件来处理了。
1. 引发异常在yii中引发异常和在普通php文件中没什么两样。你可以使用下面的代码来抛出异常:
throw new exceptionclass('错误信息');
yii定义了两个异常类:cexception和chttpexception。前者是一个通用的异常类,而后者用于对最终用户显示异常信息。同时,后者有一个statuscode属性来代表http状态码。异常的类型决定了显示效果,下面会细说。
提示: 想要告诉用户某个操作是错误的,那么引发一个chttpexception异常是最简单的方法了。比如说,如果用户在url中提供了一个无效的id值,我们可以显示一个404错误:
// 如果提交的id是无效的 throw new chttpexception(404,'此页面不存在');
2. 显示错误当一个错误被转发给组件cerrorhandler的时候,它会选择合适的视图来显示错误。如果这个错误要显示给最终用户的(比如说一个chttpexception)那么会使用名为errorxxx的视图来显示错误。这个xxx代表着http错误码(比如说400,404,500等)。如果这是个内部错误,应该只能被开发者看到,那么将使用的视图名是exception。在后一种中,将会显示完整的调用栈信息和错误行信息。
信息: 当应用运行在生产模式时,所有的错误,包括内部错误都会使用视图errorxxx。这是因为调用的栈信息和错误行信息可能包含一些敏感信息。这种情况下,开发者应该依靠错误日志来确定错误原因。
cerrorhandler会搜索合适的视图来显示错误信息,搜索的顺序如下:
webroot/themes/themename/views/system: 在当前主题视图下的system目录中。
webroot/protected/views/system: 在应用的默认视图的system目录中。
yii/framework/views: 在yii提供的标准视图目录中。
因此,如果你想要自定义错误显示,可以直接在system视图目录中或者主题的system视图目录中创建一个视图文件。每个视图文件都是一个包含许多html代码的普通php文件。参考框架的view目录下的文件,可以获得更多信息。
3. 使用一个动作来处理错误yii也可以使用控制器 动作来处理错误显示。实现的方法是在应用的配置文件中配置一个错误处理器。
return array(     ......     'components'=>array(         'errorhandler'=>array(             'erroraction'=>'site/error',         ),     ), );
上面的代码中,我们配置了cerrorhandler::erroraction属性,属性值是一个路由site/error。这个路由指向sitecontroller中的error。当然,你也可以使用其他的路由。
我们可以这样来编写error动作:
public function actionerror() {     if($error=yii::app()->errorhandler->error)         $this->render('error', $error); }
在这个动作中,首先从cerrorhandler::error中取得详细的错误信息。如果取得的信息非空,就使用cerrorhandler::error返回的信息来渲染error视图。cerrorhandler::error返回的信息是一个数组,结构如下:
code: http 状态码(比如 403, 500);
type: 错误类型(比如 chttpexception, php error);
message: 错误信息;
file: 发生错误的php文件名;
line: 错误所在的行;
trace: 错误的调用栈信息;
source: 发生错误的代码的上下文。
提示: 我们检查cerrorhandler::error是否为空的原因是error动作可以被用户访问到,这时候也许并没有什么错误。当我们传递$error数组给视图,它将会被自动释放为独立的变量。所以,在视图中我们可以使用$code,$type来访问这些信息。
4. 消息记录
一个error级别的错误信息会在错误发生时候被记录。如果这个错误是由php warning 或 notice引发的,那么这个消息将会被记录在php这个分类中;如果错误信息是由未捕获的异常所引起的,那么分类将是exception.exceptionclassname(对于chttpexception来说,它的statuscode也将被追加到分类名中)。开发者可以使用这些记录来监测应用执行时候的错误信息
以上就是yii框架官方指南系列46——专题:错误处理的内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product