Hyperf中HTTP响应有五种处理方式:一、直接返回标量值或字符串由框架自动封装;二、注入ResponseInterface显式构造;三、用ResponseTrait统一响应结构;四、通过中间件后置处理响应;五、利用注解+AOP自动包装响应。

当HTTP请求抵达Hyperf服务时,Swoole底层已将其解析为标准PSR-7请求对象,并交由Hyperf的HttpDispatcher进行调度处理;响应则需遵循immutable原则构造新Response对象返回。以下是多种可行的处理方法:
一、直接返回标量值或字符串
Hyperf支持控制器方法直接返回简单类型值,框架内部自动封装为Response对象,适用于轻量级响应场景。
1、在控制器方法中直接返回字符串,如 return 'OK';
2、返回数组,框架自动调用json()方法序列化为JSON响应
3、返回数字、布尔值等标量类型,均被统一转换为文本响应体
二、注入ResponseInterface并显式构造响应
通过依赖注入获取Hyperf\HttpServer\Contract\ResponseInterface实例,可精确控制状态码、头信息与响应体,规避隐式转换风险。
1、在控制器方法签名中声明ResponseInterface类型参数,如 public function index(ResponseInterface $response)
2、调用$response->raw('content')发送纯文本响应
3、调用$response->json(['code' => 0, 'data' => []])发送JSON响应
4、调用$response->html('
Hello
')发送HTML内容
5、调用$response->withStatus(404)->withHeader('X-Custom', 'value')链式设置响应属性
三、使用统一响应Trait封装逻辑
通过定义含success()、fail()等方法的响应Trait,实现业务层与响应格式解耦,确保全站响应结构一致。
1、创建App\Utils\ResponseTrait文件,定义success()方法返回标准化JSON结构
2、在控制器中use该Trait,并在方法内调用$this->success($data)
3、success()内部调用$this->re->json(['code' => 200, 'msg' => 'success', 'data' => $data])
4、fail()方法根据异常类型与DEBUG环境决定是否暴露堆栈信息
四、基于中间件统一拦截并修改响应
在中间件中对经过核心处理器后的Response对象进行后置处理,适用于日志记录、CORS头注入、响应体加密等横切关注点。
1、实现MiddlewareInterface接口,定义process()方法
2、在process()中接收$response参数并调用$response->withHeader('Access-Control-Allow-Origin', '*')
3、对$response->getBody()->getContents()进行二次加工(注意:需先缓存原始内容,因Body为只读流)
4、将中间件配置到config/autoload/middlewares.php对应server名称下
五、利用注解驱动的自动响应包装
通过自定义注解配合AOP,在方法执行后自动包裹响应结构,减少模板代码。
1、定义@ApiResponse注解类,声明支持code、msg等属性
2、编写Aspect切面,在目标方法返回后拦截结果值
3、若返回值非ResponseInterface实例,则自动包装为['code' => 200, 'msg' => 'OK', 'data' => $result]
4、将注解应用于控制器方法,如#[ApiResponse(msg: '获取成功')]











