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伪静态写法附代码
Jun 20 PHP
php 数组的指针操作实现代码
Feb 08 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 PHP
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
Aug 08 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
codeigniter实现get分页的方法
Jul 10 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
Oct 08 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
详解PHP中curl_multi并发的实现
Jun 08 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常用正则表达式及用法实例
2014/07/01 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
幼儿园毕业典礼主持词
2014/03/21 职场文书
司机工作自我鉴定
2014/09/19 职场文书
还款承诺书范本
2015/01/20 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
销售开票员岗位职责
2015/04/15 职场文书
三八节活动主持词
2015/07/04 职场文书
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
Python类方法总结讲解
2021/07/26 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
python中redis包操作数据库的教程
2022/04/19 Python
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers