Hyperf切换开发环境并启用调试错误需修改三处配置:一是将.env中APP_ENV设为dev;二是于config/autoload/middlewares.php注册Hyperf\Devtool\Middleware\DevToolMiddleware;三是确保config/autoload/exceptions.php启用HttpExceptionHandler,并在PHP中开启error_reporting(E_ALL)及display_errors。

Hyperf 默认在生产环境会隐藏详细错误信息,避免敏感数据泄露;而开发环境需要开启完整错误展示,方便快速定位问题。切换开发环境并启用调试错误,核心是改三处配置,不复杂但容易忽略。
修改 APP_ENV 为 dev
这是最基础的开关。Hyperf 根据 APP_ENV 值决定是否启用调试模式。必须确保 .env 文件中明确设置:
APP_ENV=dev
仅靠 debug=true 或注释掉 APP_ENV 是无效的——Hyperf 会 fallback 到 prod。如果用 Docker 部署,也要确认容器内该环境变量已正确注入(例如 docker-compose.yml 中 environment: 下有 APP_ENV=dev)。
启用 Hyperf 内置调试中间件
Hyperf 的错误页面和异常堆栈由 Hyperf\Devtool\Middleware\DevToolMiddleware 提供,但它默认不启用。需在 config/autoload/middlewares.php 中显式注册:
return [
'http' => [
\Hyperf\Devtool\Middleware\DevToolMiddleware::class,
// 其他中间件...
],
];注意:该中间件应放在路由中间件之后、业务中间件之前,通常紧接在 Hyperf\HttpServer\Middleware\ServerRequestMiddleware::class 后面即可。
检查错误处理器是否启用
Hyperf 使用 Hyperf\ExceptionHandler\ExceptionHandler 统一处理异常。确保 config/autoload/exceptions.php 中已启用对应 handler:
return [
'handler' => [
'http' => [
Hyperf\ExceptionHandler\Handler\HttpExceptionHandler::class,
],
],
];若自定义了异常处理器,需确认其 render() 方法在 dev 环境下返回带堆栈的 HTML 响应(而非仅 JSON 或简单提示)。
另外,PHP 自身的错误报告级别也需匹配:
在 php.ini 或 entrypoint.php 开头添加(仅限开发环境):
error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');Hyperf 不会覆盖这些设置,但依赖它们输出底层 PHP 错误(如语法错误、未定义变量等)。


















