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 相关文章推荐
第九节 绑定 [9]
Oct 09 PHP
php中的MVC模式运用技巧
May 03 PHP
修改php.ini以达到屏蔽错误信息并记录日志
Jun 16 PHP
基于PHP创建Cookie数组的详解
Jul 03 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
PHP抽象类与接口的区别详解
Mar 21 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 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
自己做矿石收音机
2021/03/02 无线电
一周学会PHP(视频)Http下载
2006/12/12 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
windows下ipython的安装与使用详解
2016/10/20 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
Django实现快速分页的方法实例
2017/10/22 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
python write无法写入文件的解决方法
2019/01/23 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
施工员岗位职责
2015/02/10 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
Python图片检索之以图搜图
2021/05/31 Python