You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Slim 3自定义错误处理器未生效,寻求解决方案

解决Slim 3自定义JSON错误处理器不生效的问题

我看了你的代码和问题描述,这里有几个关键问题导致你的自定义错误处理器被忽略,咱们一步步来解决:

1. 语法错误导致处理器初始化失败

你的errorHandler里有一个明显的PHP语法错误:

'trace' => $exception.getTraceAsString()

PHP中调用对象方法应该用->而不是.,正确的写法是:

'trace' => $exception->getTraceAsString()

这个错误会导致handlers.php无法正常解析,直接让自定义处理器无法被注册,所以Slim只能 fallback 到默认的HTML错误页面。

2. displayErrorDetails 设置覆盖了自定义处理器

Slim 3的核心设置里,displayErrorDetails参数会直接影响错误处理器的行为:

  • 当这个值设为true(通常是开发环境),Slim会强制使用内置的错误处理器来展示详细的调试信息,完全忽略你注册的自定义处理器。
  • 只有当displayErrorDetails设为false(生产环境)时,Slim才会使用你注册的自定义错误处理器。

打开你的src/config/settings.php,检查这个配置项:

return [
    'settings' => [
        'displayErrorDetails' => false, // 生产环境设为false,开发时如果要测试自定义处理器也需要设为false
        // 其他配置...
    ],
];

修正后的完整errorHandler代码

把语法错误修正后,你的errorHandler应该是这样:

$container['errorHandler'] = function($container) {
    return function ($request, $response, $exception) use ($container) {
        return $response->withStatus(500)
            ->withHeader('Content-Type', 'application/json')
            ->write(json_encode(array(
                'error' => 'INTERNAL_ERROR',
                'error_message' => 'Something went wrong internally.',
                'status_code' => '500',
                'trace' => $exception->getTraceAsString() // 这里修正为->
            ), JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
    };
};

额外排查步骤

  • 查看PHP的错误日志,确认有没有其他导致处理器加载失败的错误(比如路径问题、依赖缺失)。
  • 确保你注册处理器的顺序正确:先获取容器,再注册处理器,最后注册路由(你的代码顺序是对的,这点没问题)。

内容的提问来源于stack exchange,提问作者Emil Carlsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:31:51