和PHP默认的异常处理不同,ThinkPHP抛出的不是单纯的错误信息,而是一个人性化的错误页面,如下图所示:

只有在调试模式下面才能显示具体的错误信息,如果在部署模式下面,你可能看到的是一个简单的提示文字,例如:

一旦关闭调试模式,发生错误后不会提示具体的错误信息,如果你仍然希望看到具体的错误信息,那么可以如下设置:

  1. 'SHOW_ERROR_MSG' => true, // 显示错误信息

如果你试图在部署模式下访问一个不存在的模块或者操作,会发送404错误。

调试模式下面一旦系统发生严重错误会自动抛出异常,也可以用ThinkPHP内置的E方法手动抛出异常。

  1. E('新增失败');

也可以支持异常代码(默认为0),例如:

  1. E('信息录入错误',25);

同样也可以使用throw 关键字来抛出异常,下面的写法是等效的:

直线电机选型

  1. throw new \Think\Exception('新增失败');

我们可以自定义异常页面的显示,系统内置的异常模板在系统目录的Tpl/think_exception.tpl,可以通过修改系统模板来修改异常页面的显示。也通过设置TMPL_EXCEPTION_FILE配置参数来修改系统默认的异常模板文件, 例如:

  1. 'TMPL_EXCEPTION_FILE' => APP_PATH.'/Public/exception.tpl'

异常模板中可以使用的异常变量有:

  1. $e['file']异常文件名
  2. $e['line'] 异常发生的文件行数
  3. $e['message'] 异常信息
  4. $e['trace'] 异常的详细Trace信息

因为异常模板使用的是原生PHP代码,所以还可以支持任何的PHP方法和系统变量使用。

抛出异常后通常会显示具体的错误信息,如果不想让用户看到具体的错误信息,可以设置关闭错误信息的显示并设置统一的错误提示信息,例如:

  1. 'SHOW_ERROR_MSG' => false,
  2. 'ERROR_MESSAGE' => '发生错误!'

设置之后,所有的异常页面只会显示“发生错误!”这样的提示信息,但是日志文件中仍然可以查看具体的错误信息。

系统的默认情况下,调试模式是开启错误信息显示的,部署模式则关闭错误信息显示。

另外一种方式是配置ERROR_PAGE参数,把所有异常和错误都指向一个统一页面,从而避免让用户看到异常信息,通常在部署模式下面使用。ERROR_PAGE参数必须是一个完整的URL地址,例如:

  1. 'ERROR_PAGE' =>'/Public/error.html'

如果不在当前域名,还可以指定域名:

  1. 'ERROR_PAGE' =>'http://www.myDomain.com/Public/error.html'

注意ERROR_PAGE所指向的页面不能再使用异常的模板变量了。

 

thinkphp 异常处理的更多相关文章

  1. thinkphp 5.0如何实现自定义404(异常处理)页面

    404页面是客户端在浏览网页时,由于服务器无法正常提供信息,或是服务器无法回应,且不知道原因所返回的页面.404承载着用户体验与SEO优化的重任.404页面通常为用户访问了网站上不存在或已删除的页面, ...

  2. ThinkPHP 全局异常处理

    wqy的笔记:http://www.upwqy.com/details/273.html 在thinkphp6 和 thinkphp5 全局异常处理 稍有不同 ThinkPHP6 在 tp6 中 框架 ...

  3. ThinkPHP 事务处理 (事务回滚) 、异常处理

    $tran_result = true;                $trans = M();                $trans->startTrans(); try {      ...

  4. thinkphp一句话疑难解决笔记 3

    错误调试, E($msg)? 这个是tp内置的E 方法, E 函数. 它是tp抛异常 的另外一种方式. 默认的异常处理方式是, 在 框架下的 ThinkPHP/Tpl/think_exception. ...

  5. ThinkPHP2.2框架执行流程图,ThinkPHP控制器的执行流程

    ThinkPHP2.2框架执行原理.流程图在线手册 ThinkPHP控制器的执行流程 对用户的第一次URL访问 http://<serverIp>/My/index.php/Index/s ...

  6. 使用 Composer 为 ThinkPHP(3.2.3)框架添加和管理组件

    环境:Windows 64位 PHP 版本: 框架:ThinkPHP Tips: 组件:打包的代码,可以是一系列相关的类(class).接口(interface).特性(trait),用于解决某个具体 ...

  7. Thinkphp源码分析系列(二)–引导类

    在上一章我们说到,ThinkPHP.php在设置完框架所需要的变量和调教好环境后,在最后调用了  Think\Think::start();  即Think命名空间中的Think类的静态方法start ...

  8. thinkphp 设计思想

    thinkphp 运行机制: thinkphp首先设置一些常量.然后运行Think对象(系统环境),装载think的运行环境,包括:自动加载.异常处理.功能核心等.环境准备好后,运行App对象(应用程 ...

  9. thinkphp 3+ 观后详解 (2)

    接上一章的内容,我们继续来看Think.class.php文件的start方法 static public function start() { // 注册AUTOLOAD方法 spl_autoloa ...

随机推荐

  1. 集成 Swagger2 构建强大的 RESTful API 文档

    微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 快过年了,不知道你们啥时候放年假,忙不忙.反正我是挺闲的,所以有时间写 blog.今天给你们带来 SpringBoo ...

  2. (数据科学学习手札57)用ggplotly()美化ggplot2图像

    一.简介 经常利用Python进行数据可视化的朋友一定用过或听说过plotly这样的神器,我在(数据科学学习手札43)Plotly基础内容介绍中也曾做过非常详细的介绍,其渲染出的图像以浏览器为载体,非 ...

  3. SQLite 小调研

    一. 概况: SQLite 是 D. Richard Hipp 于 2000 年采用 C 语言编写的一个轻量级.跨平台的关系型数据库,支持大部分 SQL92 标准(比如视图.事务.触发器.blob 数 ...

  4. Ubuntu 常用软件记录【持续更新】

    主机之间通信 Shell 管理器: asbru-cm 文件传输工具: filezilla 虚拟化 Virtual box

  5. Pregel Worker

  6. (转)Unity UI之GUI使用

    一:GUI技术介绍 二:常见基础控件使用 三:GUILayout自动布局 四:GUI皮肤 一:GUI技术介绍 GUI技术看似成为古老的技术,但是Unity5.x之后并没有取消这种UI传统的技术.Uni ...

  7. js单击时页面的弹出

    <!DOCTYPE html><html>      <head>         <script language="JavaScript&quo ...

  8. Git部署项目

    前言 学习Git的目标是要学会如何部署项目.Git是一种版本控制系统,与之对应的还有CVS和SVN,其中CVS和SVN都是集中式的版本控制,而Git是一种分布式的,在现代项目开发中,大多使用Git来管 ...

  9. Shell while循环详解

    while 循环是 Shell 脚本中最简单的一种循环,当条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环. Shell while 循环的用法如下: while  ...

  10. 安装和使用pyspider框架时遇到的问题

    安装pyspider, 直接cmd中输入 pip install pyspider, 而后提示报错 从网上找到解决方法,pycurl需要根据python版本采用wheel方法安装. 下载链接为http ...