【问题标题】:How to do proper error handling in CodeIgniter?如何在 CodeIgniter 中进行正确的错误处理?
【发布时间】:2013-05-28 18:32:50
【问题描述】:

我正在使用 PHP 的 Codeigniter 来构建我的应用程序,有时我觉得自己被错误处理淹没了。我在任何可能失败的地方添加“故障保险”。以下是一些示例:

在模型中:

  1. 如果没有提供所有模型方法参数,则返回 false
  2. 对于每一个mysql查询,如果查询失败,返回false
  3. 根据情况,如果查询的行数0),返回false

在控制器中:

  1. 如果控制器方法缺少必需的参数,则返回 false
  2. 如果被调用模型返回 false,则重定向并显示错误消息,或显示错误视图

我想知道的是,我做得过火了吗?我觉得可能没有必要测试每个 mysql 查询,但话又说回来,如果其中一个确实因某种原因而中断,则脚本的其余部分将失败或给用户带来麻烦。

最后,在上述所有错误处理阶段中,哪些地方适合将错误记录到文件中?

【问题讨论】:

  • 模型应该抛出异常并捕获并解决他们可以处理的异常并重新抛出其他任何异常。如果/如何向用户呈现异常是控制器/视图的工作。
  • 请记住,在开发环境中处理错误和在面向用户的实时环境中处理错误可能是两件不同的事情。不过,@Orangepill 是对的。捕获模型中的异常,然后使用您的控制器/视图来决定您是否应该呈现完整的调试转储,或者只是告诉用户您有一个“oopsie”。

标签: php codeigniter error-handling


【解决方案1】:

如果您在一个函数中有如此多的返回值,则说明您的代码结构不佳。那,如果您正在运行原始 SQL 查询,除非您正在访问元数据,否则您最好将其移交给模型(CI 拥有的东西)。

对于您的方法,请考虑类型提示。写成这样的东西:

 function FunctionNameHere($user, $id, $test) {
 }

考虑传入User 对象可能会更好地编写,然后您可以这样做:

 function FunctionNameHere(User $user, $test) {
 }

哪个会为您完成所有“不正确的参数集”验证并将引发错误。

对于 SQL 查询,请考虑使用模型,这将允许您再次检索对象。没有对象? NULL 被退回。问题解决了。

考虑抛出Exceptions,而不是返回整数值(不要害怕扩展Exception 类,这样您就可以在不同的块中捕获不同的异常!)。这将允许您在代码中巧妙地包装一些常见的错误情况(例如向用户抛出一个华丽的错误框。使用异常完成了吗?检查)。

【讨论】:

  • 我没有通过传入 User 对象来遵循您的意思。你能详细说明吗?至于 SQL,我使用模型来进行查询。如果模型返回 false,那么我知道它不起作用——但我仍然在调用 THAT 模型的模型中检查它,因此,在控制器中检查它。或者也许我在某个地方误解了你。您能否将我链接到一些可以进一步详细说明如何执行此操作的文章?谢谢。
  • @user371699:你的模型是不同的对象吗?如果是,您可以键入提示您的函数只接受这种类型的参数。如果它是 false 或 null 或任何不是该类型的对象,您的代码将抛出错误(可以随意转换为异常)。关于参数,我所做的只是将您可能传递的可能参数合并到模型参考中。
猜你喜欢
  • 2014-06-29
  • 1970-01-01
  • 2016-08-18
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多