Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在CodeIgniter中进行正确的错误处理?_Php_Codeigniter_Error Handling - Fatal编程技术网

Php 如何在CodeIgniter中进行正确的错误处理?

Php 如何在CodeIgniter中进行正确的错误处理?,php,codeigniter,error-handling,Php,Codeigniter,Error Handling,我正在使用PHP的Codeigniter构建我的应用程序,有时我感觉自己被错误处理淹没了。我在可能出现故障的地方添加“故障保护”。以下是一些例子: 在模型中: 如果未提供所有模型方法参数,则返回false 对于每个mysql查询,如果查询失败,则返回false 根据情况,如果查询的行数小于1(必须大于0),则返回false 在控制器中: 如果控制器方法缺少必需的参数,则返回false 如果被调用的模型返回false,则使用错误闪存消息重定向,或显示错误视图 我想知道的是,我是不是做得太过分了?我

我正在使用PHP的Codeigniter构建我的应用程序,有时我感觉自己被错误处理淹没了。我在可能出现故障的地方添加“故障保护”。以下是一些例子:

在模型中:

  • 如果未提供所有模型方法参数,则返回false
  • 对于每个mysql查询,如果查询失败,则返回false
  • 根据情况,如果查询的行数小于1(必须大于0),则返回false
  • 在控制器中:

  • 如果控制器方法缺少必需的参数,则返回false
  • 如果被调用的模型返回false,则使用错误闪存消息重定向,或显示错误视图
  • 我想知道的是,我是不是做得太过分了?我觉得可能没有必要测试每一个mysql查询,但是,如果其中一个查询由于任何原因而中断,那么脚本的其余部分将失败,或者为用户带来麻烦


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

    如果一个函数中有这么多返回,则代码的结构很差。如果您运行的是原始SQL查询,除非您正在访问元数据,否则最好将其交给模型(CI拥有的东西)

    <对于您的方法,请考虑类型提示。写为:

     function FunctionNameHere($user, $id, $test) {
     }
    
    最好考虑传入
    用户
    对象,这样您就可以执行以下操作:

     function FunctionNameHere(User $user, $test) {
     }
    
    这将为您执行所有“错误参数集”验证,并将抛出一个错误

    对于SQL查询,请考虑使用模型,这些模型将允许您再次检索对象。没有目标<返回code>NULL。问题解决了


    <>而不是返回整数值,考虑抛出<代码>异常< /代码>(不要害怕扩展<代码>异常< /代码>类,它允许您在不同的块中捕获不同的异常!)这将允许您在代码中整齐地包装一些常见错误案例(例如向用户抛出一个华丽的错误框。使用异常?检查完成)。

    模型应该抛出异常,捕获并解决它们可以抛出的异常,然后重新抛出任何其他异常。如果/如何向用户显示异常是控制器/视图的工作。请记住,在开发环境中处理错误和在实时、面向用户的环境中处理错误可能是两件不同的事情@不过,Orangepill是对的。捕获模型中的异常,然后使用控制器/视图来决定是显示完整的调试转储,还是只告诉用户您有一个“oopsie”。我没有理解您传递用户对象的意思。你能详细说明一下吗?至于SQL,我使用模型来进行查询。如果模型返回false,那么我知道它不起作用——但我仍然在调用该模型的模型中检查它,并因此在控制器中检查它。也许我在什么地方误解了你。你能把我和一些文章联系起来,这些文章可以进一步阐述如何做到这一点吗?谢谢。@user371699:您的模型是不同的对象吗?如果是,则可以键入提示函数仅接受此类型的参数。如果它为false、null或任何非该类型的对象,代码将抛出一个错误(可以随意转换为异常)。关于参数,我所做的只是将可能传递的参数合并到模型引用中。