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 相关文章推荐
将OICQ数据转成MYSQL数据
Oct 09 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
PHP编程入门的基本语法知识点总结
Jan 26 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
PHP实现文件上传与下载
Aug 28 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和ACCESS写聊天室(四)
2006/10/09 PHP
php流量统计功能的实现代码
2012/09/29 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
在Python中实现贪婪排名算法的教程
2015/04/17 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
python如何在终端里面显示一张图片
2016/08/17 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
视光学专业毕业生推荐信
2013/10/28 职场文书
婚礼证婚人证婚词
2014/01/13 职场文书
学雷锋演讲稿
2014/03/04 职场文书
小学生综合素质评语
2014/04/23 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
介绍信样本
2015/01/31 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
电影雷锋观后感
2015/06/10 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang
Python - 10行代码集2000张美女图
2021/05/23 Python
python如何利用traceback获取详细的异常信息
2021/06/05 Python
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python
通过Python把学姐照片做成拼图游戏
2022/02/15 Python