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 set_time_limit(0)长连接的实现分析
Mar 02 PHP
php 获取本机外网/公网IP的代码
May 09 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
Apr 10 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
PHP异常处理浅析
May 12 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 PHP
Yii2 RESTful中api的使用及开发实例详解
Jul 06 PHP
php把字符串指定字符分割成数组的方法
Mar 12 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
实例讲解PHP验证邮箱是否合格
Jan 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
global.php
2006/12/09 PHP
php实现字符串翻转的方法
2015/03/27 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
js获取单选按钮的数据
2006/11/27 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
原生JS和JQuery动态添加、删除表格行的方法
2015/05/28 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
用python实现面向对像的ASP程序实例
2014/11/10 Python
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
Python 复平面绘图实例
2019/11/21 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
python selenium 获取接口数据的实现
2020/12/07 Python
Python Selenium库的基本使用教程
2021/01/04 Python
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
六一儿童节活动策划方案
2014/01/27 职场文书
人事文员岗位职责
2014/02/16 职场文书
合作经营协议书范本
2014/04/17 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis
OpenFeign实现远程调用
2022/08/14 Java/Android