首页 理论教育异常定制:如何定制PHP代码的异常信息

异常定制:如何定制PHP代码的异常信息

【摘要】:开发人员可以对异常信息进行定义,包括异常信息显示项定义和模板定义。接下来将详细介绍异常信息的定制。默认情况下,异常信息的显示模板路径为ThinkPHP/Tpl/think_exception.tpl,开发人员可以通过修改EXCEPTION_TMPL_FILE配置项修改异常信息模板。

异常信息是调试模式中最直观的数据,这些信息的处理是由系统基类ThinkException类来完成的。开发人员可以对异常信息进行定义,包括异常信息显示项定义和模板定义。这些操作虽然对程序调试意义不大,但项目的文件组件和管理却有一定的意义。为了方便在开发中进行异常处理,系统还提供了throw_exception函数用于处理异常信息,该函数封装了所有对ThinkException类的调用操作,并且不受APP_DEBUG入口文件配置项的影响。如果在生产环境中部署,不需要显示这些敏感的数据,或者需要统一收集这些异常信息,系统还支持使用一个控制器动作或者URL作为统一处理异常的页面。接下来将详细介绍异常信息的定制。

1.ThinkException类

ThinkException类继承于PHP内置的Exception异常错误处理类,提供了自定义模板和自定义信息的功能。默认情况下,异常信息的显示模板路径为ThinkPHP/Tpl/think_exception.tpl,开发人员可以通过修改EXCEPTION_TMPL_FILE配置项修改异常信息模板。如以下代码所示。

通过修改EXCEPTION_TMPL_FILE配置项,此时的异常模板将会使用自定义的模板/Public/exception.tpl,代码如下所示。

如上述代码所示,由于ThinkException类继承于Exception,所以可以使用关键字throw捕捉异常数据,并保存到全局数组中,开发人员可以手动获取数组中的异常信息。ThinkException类对Exception类捕捉到的异常数据进行了二次处理,不需要在逻辑层面直接输出,只需要在模板中直接引用即可。这也就意味着在模板中定义的PHP代码都能够被系统执行。在动作逻辑层面,只需要使用快捷函数throw_exception调用模板即可。(www.chuimin.cn)

throw_exception函数只是封装了throw_exception类的所有操作,如果习惯传统的throw关键字处理异常,ThinkPHP允许开发人员继续使用throw关键字,如以下代码所示。

2.使用URL处理异常

如果项目已经部署到生产环境中,还可以通过配置ERROR_PAGE选项指定一个URL或者控制器动作收集异常信息。例如当数据不存在,或者下载文件不存在时系统就跳转到一个页面(类似于404错误页面),如果是一个控制器动作,还可以在动作使用消息队列发送邮件给管理员。ERROR_PAGE配置项非常简单,如以下代码所示。

一旦配置了ERROR_PAGE选项,系统会忽略EXCEPTION_TMPL_FILE选项。这种方式使用的是传统的跳转方式,相当于服务器中的404异常处理,这对于访客而言是比较友好的。