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中的float类型使用说明
Jul 27 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
PHP基于数组实现的分页函数实例
Aug 20 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 PHP
详解PHP中的序列化、反序列化操作
Mar 21 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 PHP
php字符串倒叙
Apr 01 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
ajax php 实现写入数据库
2009/09/02 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
tagName的使用,留一笔
2006/06/26 Javascript
网上抓的一个特效
2007/05/11 Javascript
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
详解JS函数重载
2014/12/04 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
Python通过future处理并发问题
2017/10/17 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
Python any()函数的使用方法
2019/10/28 Python
python批量处理txt文件的实例代码
2020/01/13 Python
python学习笔记之多进程
2020/08/06 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
小时代观后感
2015/06/10 职场文书
golang slice元素去重操作
2021/04/30 Golang
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
python数字类型和占位符详情
2022/03/13 Python