Http 响应对象

Swoft 的请求与响应实现于 PSR 7 规范。请求与响应对象存在于每次 HTTP 请求。

  • 请求对象 RequestSwoft\Http\Message\Request
  • 响应对象 ResponseSwoft\Http\Message\Response

注意!
根据PSR-7对象的不可变性(immutable),所有的 with* 方法都是克隆对象然后返回,必须接收新对象来做进一步处理,或使用链式调用

基本方法

PSR-7 接口为请求和响应对象提供了这些公共方法:

  • withProtocolVersion($version)
  • withHeader($name, $value)
  • withAddedHeader($name, $value)
  • withoutHeader($name)
  • withBody(StreamInterface $body)

PSR-7 接口为响应对象提供了这些方法:

  • withStatus($code, $reasonPhrase = '')

更多请参考 PSR-7 和 查看 swoft/http-message 中具体的实现类

如何获取

  • 通过控制器方法参数注入 (Response $response)
  • 通过请求上下文获取 context()->getResponse()
  • 通过请求上下文获取 Swoft\Context\Context::mustGet()->getResponse() (已废弃)

设置状态码

$response = \context()->getResponse();
return $response->withStatus(404);

输出字符串内容

return $response->withContent("Hello Swoft2.0");

输出数组

$data = ['name'=>'Swoft2.0'];
$response->withData($data);

输出头信息

return $response->withHeader("name","Swoft2.0");

重定向

// 302
return $response->redirect("http://www.swoft.org",302);

// 404 page
return $response->redirect('/404');

文件下载

return $response->file(\alias('@runtime/1.zip'), "application/octet-stream");

设置Cookies

$response = $response->withCookie(’name', 'value');

$response = $response->withCookie(’name', [
    'value'    => 'value3',
    'httpOnly' => true
]);

设置多个:

$cookies = [
    'key1' => 'value1',
    'key2' => [
        'value' => 'value2',
    ],
    'key3' => [
        'value'    => 'value3',
        'httpOnly' => true
    ],
];

$response = $response->withCookies($cookies);
/docs/2.x/zh-CN/http-server/response.html
progress-bar