hyperf 生产环境默认隐藏错误,需设 app_env=dev 并启用 debug=true,配置 developmentexceptionhandler 和 validationexceptionhandler(键名须与 server name 一致),自定义异常处理器中仅 dev 环境返回 trace 信息。

Hyperf 默认在生产环境会隐藏详细错误信息,前端只看到通用错误页或空响应。要开启前端错误展示,核心是控制异常处理器行为、调整日志与响应策略,并确保开发环境配置生效。
启用开发模式并暴露错误堆栈
Hyperf 通过 APP_ENV 环境变量区分环境,只有 dev 或 local 下才允许显示详细错误。确认 .env 文件中已设置:
APP_ENV=dev DEBUG=true
同时检查 config/autoload/exceptions.php 中是否注册了开发专用处理器(如 Hyperf\ExceptionHandler\Handler\DevelopmentExceptionHandler),该处理器会在 APP_ENV !== 'prod' 时返回带堆栈的 JSON 或 HTML 响应。
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
确保 Validation 错误能正确返回 errors 字段
验证失败不显示提示,常因异常处理器未匹配到对应 server name。运行 php bin/hyperf.php start 查看启动日志中的 server name(如 [INFO] Server started: http://0.0.0.0:9501 (name: api)),再确认 config/autoload/exceptions.php 中 handler 的键名与之完全一致(大小写敏感):
return [
'handler' => [
'api' => [ // 必须和 server name 一致
Hyperf\Validation\ValidationExceptionHandler::class,
],
],
];
且该处理器内必须调用 $throwable->validator->errors()->messages(),而非仅 first(),否则 errors 字段为空。
禁用生产级异常兜底,避免吞掉调试信息
框架内置的 HttpExceptionHandler 会将 NotFoundException 等转为标准 HTTP 状态码(如 404),但它不返回堆栈。若需前端看到完整异常信息,需确保自定义 AppExceptionHandler 不放在它前面,或明确在 isValid() 中排除 HttpException 子类:
public function isValid(Throwable $throwable): bool
{
return $throwable instanceof \Throwable
&& !($throwable instanceof \Hyperf\HttpServer\Exception\HttpException);
}
前端响应体需包含 message 和 trace(仅 dev 环境)
在自定义 handler 的 handle() 方法中,可按环境决定是否注入堆栈:
- 使用
$throwable->getTraceAsString()获取字符串堆栈 - 仅当
env('APP_ENV') === 'dev'时,将其加入响应 body - 注意:不要在生产环境返回 trace,存在安全风险
例如:
$data = [
'code' => $throwable->getCode(),
'message' => $throwable->getMessage(),
];
if (env('APP_ENV') === 'dev') {
$data['trace'] = $throwable->getTraceAsString();
}
return $response->withStatus(500)->withBody(new SwooleStream(json_encode($data, JSON_UNESCAPED_UNICODE)));前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










