響應對象 response
響應對象 Response 爲 Swoft\Http\Message\Response
查看 response 對象源碼,文件路徑爲 vendor/swoft/http-message/src/Response.php
class Response implements ResponseInterface
{
use CookiesTrait, MessageTrait, PrototypeTrait;
.
.
.
}
可知 response 對象實現了 ResponseInterface 接口,另外引用 CookiesTrait, MessageTrait, PrototypeTrait 三個trait
響應對象 response 的獲取
- 通過控制器方法注入
- 通過請求上下文獲取
<?php declare(strict_types=1);
namespace App\Http\Controller;
use Swoft\Context\Context;
use Swoft\Http\Message\ContentType;
use Swoft\Http\Message\Request;
use Swoft\Http\Message\Response;
use Swoft\Http\Server\Annotation\Mapping\Controller;
use Swoft\Http\Server\Annotation\Mapping\RequestMapping;
/**
* Class TestController
* @package App\Http\Controller
* @Controller(prefix="test")
*/
class TestController
{
/**
* @RequestMapping(route="index")
* @param Request $request
* @return Response
*/
public function index(Request $request) : Response
{
$path = $request->getUriPath();
$headers = $request->getHeaders();
$data = [
'path' => $path,
'headers' => $headers,
];
$headers = [
'token' => 'akdhfheiwoadskajkdjoihh=ahdiu0-2hds',
];
$response = Context::mustGet()->getResponse();
return $response->withStatus(200)
->withContentType(ContentType::JSON)
->withHeaders($headers)
->withData($data);
}
/**
* @RequestMapping(route="test")
* @param Request $request
* @param Response $response
* @return Response
*/
public function test(Request $request,Response $response)
{
return $response->withData(['name'=>'swoft']);
}
}
返回響應信息
設置狀態碼
$response = \Swoft\Context\Context::mustGet()->Response();
return $response->withStatus(403);
輸出字符串
return $response->withContent("Hello World");
輸出數組
$data = ['name'=>'swoft'];
return $response->withData($data);
輸出頭信息
$headers = ['token'=>'dhsjagfuigfiugu=-dsah=dsaj'];
return $response->withHeaders($headers);
重定向
return $response->redirect("http://www.swoft.org",302);
文件下載
return $response->file(\alias('@runtime/1.zip'), "application/octet-stream");
設置 cookie
$response = $response->withCookie(’name', 'value');
$cookies = [
'key1' => 'value1',
'key2' => ['value' => 'value2'],
];
$response = $response->withCookies($cookies);
其他方法
還有很多方法,比如設置返回數據 Json 類型等,在這裏就不一一羅列了,可以查看源代碼或者官方文檔查看,另外注意 is 開頭的方法,有助於理解標準的 http 狀態碼的意義。