【问题标题】:Slim error handling苗条的错误处理
【发布时间】:2014-12-16 14:37:51
【问题描述】:

Slim 框架很好 - 非常好。我遇到的问题之一是它处理错误的方式。在原版 PHP 代码中,我偶尔会使用 trigger_error 语句作为调试辅助。在原版 PHP 中,这没有不良后果,因为默认情况下 trigger_errors 是 E_USER_NOTICE 类型的错误,不会阻止脚本死在其轨道上。然而,在 Slim 中,事情似乎有所不同。一个良性的 trigger_error 会导致它抛出一个 wobbly 并返回一个 HTTP 500。

我认为这可以通过以下方式纠正

  1. 模式 更改为开发或其他方式,但文档声明这对 Slim 内部的工作方式没有任何影响。
  2. 下一个调用端口 - 更改苗条错误日志记录级别

    $app = new \Slim\Slim(array('log.level' => \Slim\Log::ERROR);

与 PHP 的 error_reporting 效果不太一样。设置它会阻止错误浮动到 error.log 文件(Slim 使用的默认错误记录器),但至关重要的是它不会停止 HTTP 500。

我遇到过建议替换默认 Slim::handleErrors 方法的论坛帖子。这很容易,但我想知道这是否不正确。当 Slim 遇到完全无害的 trigger_error 时,阻止 Slim 死机的正确方法是什么?我可以很好地避免这种情况,但我可能会依赖其他可能包含此类语句的代码。非常感谢任何帮助

【问题讨论】:

  • 嗨,你使用'debug'标志吗?
  • 如何将 trigger_error 放在 try/catch 块中? docs.slimframework.com/#Route-Helpers
  • @ruifn - 只是改变 Slim 模式 - 甚至没有调试 - 什么都不做。引用 Slim 手册 - Slim 将错误转换为 ErrorException 实例......如果启用调试,Slim 将使用其内置的错误处理程序来显示未捕获异常的诊断信息。如果调试被禁用,Slim 将改为调用您的自定义错误处理程序,将其他未捕获的异常作为其第一个也是唯一的参数传递给它。

标签: php slim


【解决方案1】:

答案很简单。我通过查看 slim.php 中的 handleErrors 函数发现了这一点。只需发出一个

error_reporting(E_ALL & ~E_USER_WARNING);

在调用 trigger_error 并且您正在开展业务之前。 Slim 正在某处更改默认的 PHP error_reporting 以包含 E_USER_WARNING。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 2020-06-27
    • 2019-01-06
    • 2022-08-03
    • 1970-01-01
    相关资源
    最近更新 更多