`
zccst
  • 浏览: 3292026 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

YII异常处理actionError

    博客分类:
  • YII
阅读更多
zccst转

错误处理目录
1,引发异常
2,显示错误
3,使用一个动作来处理错误
4,消息记录

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也将被追加到分类名中)。开发者可以使用这些记录来监测应用执行时候的错误信息

参考资料
http://www.yiiframework.com/doc/guide/1.1/zh_cn/topics.error


如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论

相关推荐

    YII Framework教程之异常处理详解

    本文讲述了YII Framework异常处理。分享给大家供大家参考,具体如下: 异常无处不在,作为程序员,活着就是为了创造这些异常,然后修复这些异常而存在的。YII框架封装了PHP的异常,让异常处理起来更简单。 使用 YII...

    实例讲解如何在PHP的Yii框架中进行错误和异常处理

    Yii已经默认已经在CApplication上实现了异常和错误的接管,这是通过php的set_exception_handler,set_error_handler实现的。通过这两个PHP内置函数,可以对程序中未捕获的异常以及错误进行接管处理,从而提高程序的...

    yii框架yii框架yii框架yii框架yii框架

    很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架

    yii2 开发api接口时优雅的处理全局异常的方法

    前言:个人觉得,学习或温习一套Web框架,在快速阅读一遍文档后,应从路由,控制器,请求/响应对象,数据模型(Logic,Dao,Entity)...今天就把 yii2 自带的全局异常处理器改写至对 api 友好(yii2的 yii\web\HttpExce

    yii2-custom-errorhandler:Yii 2.x应用程序中的自定义错误处理

    Yii 2.x应用程序中的自定义错误处理 该模块允许您将其处理挂在Exceptions上。 ###何时需要###例如,捕获“危险”的用户操作。 发生错误时,您可以记录数据并跟踪特定用户或IP的ForbiddenHttpException或...

    深入理解Yii2.0

    《深入理解Yii2.0》是一本干货。主要讲解Yii2.0及所代表的最新一代Web开发框架的新特性、新技术、新理念、新模式。 采用的方式是分析框架的源代码,尝试从根上进行理解和阐述,并融入个人使用Yii开发的一些经验和...

    Yii2.0打造京东商城平台PHP电商实战Yii2.0视频教程

    Yii2.0级基于Yii1.X完全重写的,不仅是小版本升级的升级。所以想要系统学习Yii2.0这个框架这套教程可以从实战项目带你入手。不错的学习YII框架的基础课程,电商系统的结构完整、框架资源太大,传百度网盘了,链接在...

    yii framework(Yii)框架window版

    Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。事实上...

    yii1.1.10 开发包(包含yii权威指南以及yii博客例子讲解)

    yii1.1.10 开发包(包含yii权威指南以及yii博客例子讲解)

    yii框架中文手册教程和YII模板

    yii框架中文手册教程和YII模板 我很辛苦才找到的

    php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACEeval()d code error

    syntax error, unexpected T_VAR错误解决方法PHP的异常处理类Exception的使用及说明php Try Catch异常测试PHP如何抛出异常处理错误php中异常处理方法小结PHP中的错误处理、异常处理机制分析实例讲解如何在PHP的Yii...

    Yii 中文帮助文档

    Yii 是什么 Yii 是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。它将 Web 编程中的可重用性发挥到极致,能够显著加速开发进程。Yii(读作“易”)代表简单(easy)、高效(efficient)、可扩展(extensible)。...

    Yii权威指南思维导图

    Yii权威指南思维导图 yii类结构 类导图 权威指南

    yii2-image, 基于Kohana图像库的图像处理Yii2框架扩展.zip

    yii2-image, 基于Kohana图像库的图像处理Yii2框架扩展 yii2-image简单易用的Yii2框架扩展,使用强大的Kohana图像库进行图像操作。 灵感由老yii扩展 http://www.yiiframework.com/extension/image/ 和Kohana图像库 ...

    Mastering Yii.pdf(en)

    Yii Framework 2 (Yii2) is the successor to the popular Yii framework. Like its successor, Yii2 is an open source, high-performance rapid development framework designed to create modern, scalable, ...

    Yii2参考手册-新

    Yii2参考手册,Yii2中文手册完整版

    YII多种缓存机制

    YII 多种缓存机制的运用 如文件缓存内存缓存 动态缓存等

    新下载的yii2,yii framework

    刚下载的yii2,新下载的yii2

Global site tag (gtag.js) - Google Analytics