【问题标题】:How to differentiate between error exceptions and fatal exceptions in CodeIgniter?CodeIgniter 中如何区分错误异常和致命异常?
【发布时间】:2013-07-30 22:59:32
【问题描述】:
我想在我的项目中使用两种不同的异常:
致命异常。如果出现意外错误,例如 mysql 查询失败,我想抛出这种异常,而不必捕获它。此异常意味着我需要使用 CodeIgniter 的 show_error() 函数执行一些操作,例如记录消息,然后显示错误。脚本应该退出而不继续。
错误异常。如果用户做了不允许的事情,例如在数字字段中输入字母或访问他没有权限的页面,则应该抛出并捕获此异常。
我想在整个项目中使用这两种异常。数字 2 很清楚,但我该如何做异常 1?最好不必为每个 try 块设置两个 catch 块,因为第一种类型是全局的并且应该始终相同:记录消息、显示错误、退出。最后,在 codeigniter 中,哪里是扩展 Exception 类的正确位置?
谢谢。
【问题讨论】:
标签:
php
codeigniter
exception
exception-handling
【解决方案1】:
致命异常
The link posted by Sunil above 非常适合全局处理致命异常。您要非常小心地抛出这些异常,并确保对于最终用户来说,该站点看起来并不可怕和损坏 - humoring the user is always a good idea。
错误异常
我认为您最好不要将数字字段中的文本等错误视为例外,因为它们不会破坏正常流程程序的说明。
如果用户在数字字段中输入字母并提交表单,您的应用程序应该预计用户可能会提供垃圾数据,然后您重复输入过程,这是正常的流量。
这是我在代码点火器中处理场景 2 的方式:
- 用
/application/libraries/MY_Log 扩展CI_Log
- 如果日志级别允许,添加
MY_Log::$logs 以将消息存储在数组中
- 模板挂钩获取日志
MY_Log::get_logs(),然后将它们传递到视图,该视图显示日志级别的相应message boxes
我还实现了一个名为error_log 的自定义日志级别。这适用于我想发送到日志文件而不向用户显示的任何内容。