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 相关文章推荐
一个图形显示IP的PHP程序代码
Oct 19 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
php下将多个数组合并成一个数组的方法与实例代码
Feb 03 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
初识laravel5
Mar 02 PHP
joomla实现注册用户添加新字段的方法
May 05 PHP
PHP对象实例化单例方法
Jan 19 PHP
php表单习惯用的正则表达式
Oct 11 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 PHP
如何用PHP websocket实现网页实时聊天
May 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
提升PHP执行速度全攻略(上)
2006/10/09 PHP
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
PHP中的session安全吗?
2016/01/22 PHP
php图片上传类 附调用方法
2016/05/15 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
CI框架表单验证实例详解
2016/11/21 PHP
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
使用Python & Flask 实现RESTful Web API的实例
2017/09/19 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
2020/05/29 Python
python中常见错误及解决方法
2020/06/21 Python
Python自动登录QQ的实现示例
2020/08/28 Python
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
金融专业应届生求职信
2013/11/02 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
药品业务员岗位职责
2014/04/17 职场文书
医院志愿者活动总结
2015/05/06 职场文书