hyperf 中调试请求参数报错,通常因误用 var_dump、print_r 或 dd() 等阻塞函数破坏协程流程;应改用 $this->logger->info() 记录日志、$this->response->json() 返回 json,或通过 requestinterface 依赖注入安全获取参数,并启用 requestloggermiddleware 自动记录完整请求详情。

Hyperf 中调试时想输出请求参数却报错,通常是因为直接在控制器或中间件里用了不支持的输出方式(比如 var_dump、print_r 或 dd()),而 Hyperf 是基于 Swoole 的协程环境,这些函数会破坏响应流程或触发协程调度异常。
避免使用阻塞式调试函数
Hyperf 运行在协程中,var_dump、print_r、die、exit 等会中断协程执行,导致 HTTP 响应失败或 Worker 进程崩溃。尤其 dd()(Laravel 风格)在 Hyperf 中默认不可用,强行引入可能引发依赖冲突或协程上下文丢失。
- ❌ 不要写
var_dump($request->all()); die; - ❌ 不要写
dd($request->input('name')); - ✅ 改用日志记录:
$this->logger->info('Request data', $request->all()); - ✅ 或转为 JSON 输出到响应(仅开发环境):
return $this->response->json($request->all());
正确获取并安全输出请求参数
Hyperf 的 Request 对象需通过依赖注入获取,不能直接 new 或静态调用。常见错误是试图在非容器管理的类里调用 request()->all(),这会抛出 ContainerException 或 NotFoundException。
- 确保控制器方法参数类型提示正确:
public function index(RequestInterface $request) - 获取参数推荐方式:
$request->input('key', 'default')、$request->all()、$request->query()、$request->post() - 注意:POST 表单和 JSON Body 需区分处理,JSON 需提前配置
RequestBodyParser(默认已启用)
开启调试日志查看完整请求
比临时输出更可靠的方式是启用 Hyperf 日志中间件,自动记录请求/响应详情。
- 确认
config/autoload/logger.php中default日志通道存在且级别为debug - 启用
Hyperf\HttpServer\Middleware\TraceMiddleware(可选,用于追踪 ID) - 在
config/autoload/middleware.php加入:Hyperf\HttpServer\Middleware\RequestLoggerMiddleware::class - 日志路径默认为
runtime/logs/hyperf.log,搜索[request]即可看到完整参数
临时调试可用的协程安全方式
如果必须在代码中快速查看变量,可用协程安全的日志或响应方式:
$this->logger->debug('Debug request', ['params' => $request->all()]);return $this->response->withStatus(200)->withHeader('Content-Type', 'application/json')->withBody(new SwooleHttpMessage($request->all()));- 使用
Hyperf\Utils::dump()(Hyperf 自带,协程友好,但仅限开发环境)











