响应

在 Hyperf 里可通过 Hyperf\HttpServer\ResponseInterface 接口类来注入 Response 代理对象对响应进行处理,默认返回 Hyperf\HttpServer\Response 对象,该对象可直接调用所有 Psr\Http\Message\ResponseInterface 的方法。

返回 Json 格式

Hyperf\HttpServer\ResponseInterface 提供了 json($data) 方法用于快速返回 Json 格式,并设置 Content-Typeapplication/json$data 接受一个数组或为一个实现了 Hyperf\Utils\Contracts\Arrayable 接口的对象。

  1. <?php
  2. namespace App\Controller;
  3. use Hyperf\HttpServer\ResponseInterface;
  4. use Psr\Http\Message\ResponseInterface as Psr7ResponseInterface;
  5. class IndexController
  6. {
  7. public function json(ResponseInterface $response): Psr7ResponseInterface
  8. {
  9. $data = [
  10. 'key' => 'value'
  11. ];
  12. return $response->json($data);
  13. }
  14. }

返回 Xml 格式

Hyperf\HttpServer\ResponseInterface 提供了 xml($data) 方法用于快速返回 XML 格式,并设置 Content-Typeapplication/xml$data 接受一个数组或为一个实现了 Hyperf\Utils\Contracts\Xmlable 接口的对象。

  1. <?php
  2. namespace App\Controller;
  3. use Hyperf\HttpServer\ResponseInterface;
  4. use Psr\Http\Message\ResponseInterface as Psr7ResponseInterface;
  5. class IndexController
  6. {
  7. public function xml(ResponseInterface $response): Psr7ResponseInterface
  8. {
  9. $data = [
  10. 'key' => 'value'
  11. ];
  12. return $response->xml($data);
  13. }
  14. }

返回 Raw 格式

Hyperf\HttpServer\ResponseInterface 提供了 raw($data) 方法用于快速返回 raw 格式,并设置 Content-Typeplain/text$data 接受一个字符串或为一个实现了 __toString() 方法的对象。

  1. <?php
  2. namespace App\Controller;
  3. use Hyperf\HttpServer\ResponseInterface;
  4. use Psr\Http\Message\ResponseInterface as Psr7ResponseInterface;
  5. class IndexController
  6. {
  7. public function raw(ResponseInterface $response): Psr7ResponseInterface
  8. {
  9. $data = [
  10. 'key' => 'value'
  11. ];
  12. return $response->raw($data);
  13. }
  14. }

返回视图

Hyperf 暂不支持视图返回,欢迎社区贡献相关的 PR。

重定向

Hyperf\HttpServer\ResponseInterface 提供了 redirect(string $toUrl, int $status = 302, string $schema = 'http') 返回一个已设置重定向状态的 Psr7ResponseInterface 对象。

redirect 方法:

参数类型默认值备注
toUrlstring如果参数不存在 http://https:// 则根据当前服务的 Host 自动拼接对应的 URL,且根据 $schema 参数拼接协议
statusint302响应状态码
schemastringhttp$toUrl 不存在 http://https:// 时生效,仅可传递 httphttps
  1. <?php
  2. namespace App\Controller;
  3. use Hyperf\HttpServer\ResponseInterface;
  4. use Psr\Http\Message\ResponseInterface as Psr7ResponseInterface;
  5. class IndexController
  6. {
  7. public function redirect(ResponseInterface $response): Psr7ResponseInterface
  8. {
  9. // redirect() 方法返回的是一个 Psr\Http\Message\ResponseInterface 对象,需再 return 回去
  10. return $response->redirect('/anotherUrl');
  11. }
  12. }
  1. <?php
  2. namespace App\Controller;
  3. use Hyperf\HttpServer\ResponseInterface;
  4. use Psr\Http\Message\ResponseInterface as Psr7ResponseInterface;
  5. use Swoft\Http\Message\Cookie\Cookie;
  6. class IndexController
  7. {
  8. public function cookie(ResponseInterface $response): Psr7ResponseInterface
  9. {
  10. $cookie = new Cookie('key', 'value');
  11. return $response->withCookie($cookie)->withContent('Hello Hyperf.');
  12. }
  13. }

Gzip 压缩

分块传输编码 Chunk

返回文件下载