Request 對(duì)象
接收客戶端的 HTTP
請(qǐng)求對(duì)象
生命周期
Request
對(duì)象在系統(tǒng)中以單例模式存在,自收到客戶端 HTTP
請(qǐng)求時(shí)自動(dòng)創(chuàng)建,直至請(qǐng)求結(jié)束自動(dòng)銷(xiāo)毀。Request
對(duì)象完全符合 PSR-7 中的所有規(guī)范。
核心方法
getRequestParam()
用于獲取用戶通過(guò) POST
或者 GET
提交的參數(shù)(注意:若 POST
與 GET
存在同鍵名參數(shù),則以POST
為準(zhǔn))。
示例:
// 在控制器中 可以通過(guò) $this->request() 獲取到 Request 對(duì)象
// $request = $this->request();
// 獲取 `POST` 或者 `GET` 提交的所有參數(shù)
$data = $request->getRequestParam();
var_dump($data);
// 獲取 `POST` 或者 `GET` 提交的單個(gè)參數(shù)
$orderId = $request->getRequestParam('orderId');
var_dump($orderId);
// 獲取 `POST` 或者 `GET` 提交的多個(gè)參數(shù)
$mixData = $request->getRequestParam("orderId","type");
var_dump($mixData);
getSwooleRequest()
獲取當(dāng)前的 swoole_http_request
對(duì)象。
getCookieParams()
獲取 HTTP
請(qǐng)求中的 cookie
信息
// 獲取所有 `cookie` 信息
$all = $request->getCookieParams();
var_dump($all);
// 獲取單個(gè) `cookie` 信息
$who = $request->getCookieParams('who');
var_dump($who);
getUploadedFiles()
獲取客戶端上傳的全部文件信息。
// 獲取一個(gè)上傳文件,返回的是一個(gè) \EasySwoole\Http\Message\UploadFile 的對(duì)象
$img_file = $request->getUploadedFile('img');
// 獲取全部上傳文件返回包含 \EasySwoole\Http\Message\UploadFile 對(duì)象的數(shù)組
$data = $request->getUploadedFiles();
var_dump($data);
點(diǎn)擊查看 UploadFile對(duì)象
getBody()
獲取以非 form-data
或 x-www-form-urlenceded
編碼格式 POST
提交的原始數(shù)據(jù),相當(dāng)于PHP中的 $HTTP_RAW_POST_DATA
。
獲得 get 內(nèi)容
$get = $request->getQueryParams();
獲得 post 內(nèi)容
$post = $request->getParsedBody();
獲得 raw 內(nèi)容
例如在常用的
post
請(qǐng)求中,Content-Type
為application/json
時(shí)就可用如下方法獲取json
請(qǐng)求體內(nèi)容。
$content = $request->getBody()->__toString();
$raw_array = json_decode($content, true);
獲得頭部
$header = $request->getHeaders();
獲得 server
$server = $request->getServerParams();
獲得 cookie
$cookie = $request->getCookieParams();
將數(shù)據(jù)掛載到當(dāng)前請(qǐng)求對(duì)象 $request 上
將某個(gè)需要的數(shù)據(jù)掛載到當(dāng)前請(qǐng)求對(duì)象 $request
上,方便在本次請(qǐng)求生命周期內(nèi)的后續(xù)其他方法中調(diào)用這個(gè)數(shù)據(jù)。
支持鏈?zhǔn)秸{(diào)用。
$this->request()->withAttribute($key, $value);
// 鏈?zhǔn)秸{(diào)用
$this->request()->withAttribute($key1, $value1)->withAttribute($key2, $value2);
注意:掛載的數(shù)據(jù)只對(duì)每次請(qǐng)求當(dāng)前請(qǐng)求生命周期有效。
獲取當(dāng)前請(qǐng)求對(duì)象 $request 上的掛載數(shù)據(jù)
// 獲取單個(gè)數(shù)據(jù)
$this->request()->getAttribute($key);
// 獲取所有 返回?cái)?shù)組
$this->request()->getAttributes(); // array
注意:掛載的數(shù)據(jù)只對(duì)每次請(qǐng)求當(dāng)前請(qǐng)求生命周期有效。
丟棄掛載到當(dāng)前請(qǐng)求對(duì)象 $request 上的某個(gè)數(shù)據(jù)
$this->request()->withoutAttribute($uselessKey);
使用示例:
<?php
namespace App\HttpController;
use EasySwoole\Http\AbstractInterface\Controller;
class Index extends Controller
{
public function onRequest(?string $action): ?bool
{
// 掛載數(shù)據(jù) 到 $request 對(duì)象上
$this->request()->withAttribute('name', 'easyswoole')
->withAttribute('age', 18);
return parent::onRequest($action); // TODO: Change the autogenerated stub
}
public function index()
{
// 獲取掛載的單個(gè)數(shù)據(jù)
$ret = $this->request()->getAttribute('name'); // 'easyswoole'
// 獲取掛載的全部數(shù)據(jù)
$rets = $this->request()->getAttributes();
// 刪除某個(gè)掛載數(shù)據(jù)
$this->request()->withoutAttribute('name');
// 再次獲取掛載的全部數(shù)據(jù)
$rets1 = $this->request()->getAttributes();
var_dump($ret, $rets, $rets1);
// 運(yùn)行結(jié)果:
/*
string(10) "easyswoole"
array(2) {
["name"]=>
string(10) "easyswoole"
["age"]=>
int(18)
}
array(1) {
["age"]=>
int(18)
}
*/
}
}