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 相关文章推荐
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
Dec 06 PHP
php 获取mysql数据库信息代码
Mar 12 PHP
PHP 实现多服务器共享 SESSION 数据
Aug 15 PHP
Godaddy空间Zend Optimizer升级方法
May 10 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
PHP设计模式之命令模式的深入解析
Jun 13 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
php生成圆角图片的方法
Apr 07 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
php事件驱动化设计详解
Nov 10 PHP
PHP通过GD库实现验证码功能示例
Feb 23 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 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中将网址转换为超链接的函数
2011/09/02 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
golang与PHP输出excel示例
2016/07/22 PHP
php+croppic.js实现剪切上传图片功能
2018/08/14 PHP
各浏览器中querySelector和querySelectorAll的实现差异分析
2012/05/23 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
Vuex入门到上手教程
2018/06/20 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
跟老齐学Python之数据类型总结
2014/09/24 Python
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Python实现删除文件但保留指定文件
2015/06/21 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
python 写一个水果忍者游戏
2021/01/13 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
环境工程毕业生自荐信
2013/11/17 职场文书
大学生如何写自荐信
2014/01/08 职场文书
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
自荐信格式范文
2015/03/04 职场文书
陪护人员误工证明
2015/06/24 职场文书
研讨会致辞
2015/07/31 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技