YII Framework教程之异常处理详解


Posted in PHP onMarch 14, 2016

本文讲述了YII Framework异常处理。分享给大家供大家参考,具体如下:

异常无处不在,作为程序员,活着就是为了创造这些异常,然后修复这些异常而存在的。YII框架封装了PHP的异常,让异常处理起来更简单。

使用 YII处理错误和异常的配置方法

你可以在入口文件中定义YII_ENABLE_ERROR_HANDLER和YII_ENABLE_EXCEPTION_HANDLER为true.

引发异常的情况

1.触发onError或者onException事件

2.人为抛出异常。例如

throw new ExceptionClass('错误信息');//异常的基类
throw new CHttpException(404,'此页面不存在');//面向最终用户的类

异常的显示视图

当一个错误被转发给组件CErrorHandler的时候,它会选择合适的视图来显示错误。
CErrorHandler会搜索合适的视图来显示错误信息,搜索的顺序如下:

1. WebRoot/themes/ThemeName/views/system: 在当前主题视图下的system目录中。
2. WebRoot/protected/views/system: 在应用的默认视图的system目录中。
3. yii/framework/views: 在Yii提供的标准视图目录中。

使用action来处理捕捉的异常错误.

修改配置文件

/yii_dev/testwebap/protected/config/main.php
    'errorHandler'=>array(
// use 'site/error' action to display errors
      'errorAction'=>'site/error',
    ),

用来指定处理错误的action。例如site controller中的error action
actionError默认代码如下

/**
 * This is the action to handle external exceptions.
 */
public function actionError()
{
  if($error=Yii::app()->errorHandler->error)
  {
    if(Yii::app()->request->isAjaxRequest)
      echo $error['message'];
    else
      $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: 发生错误的代码的上下文。

异常日志

一个error级别的错误信息会在错误发生时候被记录。如果这个错误是由PHP warning 或 notice引发的,那么这个消息将会被记录在php这个分类中;如果错误信息是由未捕获的异常所引起的,那么分类将是exception.ExceptionClassName(对于CHttpException来说,它的statusCode也将被追加到分类名中)。开发者可以使用这些记录来监测应用执行时候的错误信息异常处理的方法。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
功能齐全的PHP发送邮件类代码附详细说明
Jul 10 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
深入php-fpm的两种进程管理模式详解
Jun 03 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
php实现socket推送技术的示例
Dec 20 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 PHP
Zend Framework教程之Application用法实例详解
Mar 14 #PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 #PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 #PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 #PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 #PHP
PHP访问数据库集群的方法小结
Mar 14 #PHP
php 无限级分类 获取顶级分类ID
Mar 13 #PHP
You might like
用php+javascript实现二级级联菜单的制作
2008/05/06 PHP
php Static关键字实用方法
2010/06/04 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
js密码强度校验
2015/11/10 Javascript
浅谈JS运算符&&和|| 及其优先级
2016/08/10 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
python写入并获取剪切板内容的实例
2018/05/31 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
为什么UNION ALL比UNION快
2016/03/17 面试题
理工科学生的自我评价
2013/12/15 职场文书
交通事故协议书范本
2014/11/18 职场文书
内勤岗位职责
2015/02/10 职场文书
董事长年会致辞
2015/07/29 职场文书
网络营销实训总结
2015/08/03 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android
springboot读取resources下文件的方式详解
2022/06/21 Java/Android