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+mysql实现无限级分类 | 树型显示分类关系
Nov 19 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
php强制运行广告的方法
Dec 01 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
yii2中使用Active Record模式的方法
Jan 09 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
Yii2语言国际化的配置教程
Aug 19 PHP
PHP PDOStatement::fetchObject讲解
Feb 01 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 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 session和cookie使用说明
2010/04/07 PHP
PHP学习笔记之一
2011/01/17 PHP
php中对2个数组相加的函数
2011/06/24 PHP
php+jQuery+Ajax简单实现页面异步刷新
2016/08/08 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
对python中的for循环和range内置函数详解
2018/04/17 Python
使用Python处理BAM的方法
2018/09/28 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
python实现祝福弹窗效果
2019/04/07 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
jupyter 导入csv文件方式
2020/04/21 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
.net面试题
2016/09/17 面试题
机械制造与自动化应届生求职信
2013/11/16 职场文书
优秀的自荐信要注意哪些
2014/01/03 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
优秀班主任申报材料
2014/12/16 职场文书
vue修饰符.capture和.self的区别
2022/04/22 Vue.js
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js