一、獲取 request 物件
-
通過控制方法引數注入的方式
<?php declare(strict_types=1); namespace app\Http\Controller; use Swoft\Http\Message\Request; class TestController{ public function create(Request $request) { } }
-
通過請求上下文獲取
<?php declare(strict_types=1); namespace app\Http\Controller; use Swoft\Context\Context; class TestController{ protected $request; public function __construct(){ $this->request = Context::mustGet()->getRequest(); } public function create() { $params = $this->request->input(); //TODO SOMETHING } }
二、獲取請求資料
在介紹獲取請求資料之前,我們先看一下原始碼,檔案路徑為 vendor/swoft/http-message/src/Request.php
class Request extends PsrRequest implements ServerRequestInterface
{
use InteractsWithInput;
.
.
.
}
可見 Request 類繼承了 PsrRequest 類,實現了 ServerRequestInterface 介面,並引用了 InteractsWithInput trait。
獲取請求 method
$method = $request->getMethod();
獲取請求的 uri
$uri = $request->getUri();//該方法返回的是物件,是物件,是物件
$scheme = $uri->getScheme();
$authority = $uri->getAuthority();
$userInfo = $uri->getUserInfo();
$host = $uri->getHost();
$port = $uri->getPort();
$path = $uri->getPath();
$query = $uri->getQuery();
$fragment = $uri->getFragment();
獲取請求 headers
// 獲取全部header
$headers = $request->getHeaders();
// 獲取單個header
$host = $headers = $request->getHeader('host'); //返回值是array
$host = $request->getHeaderLine("host");//返回值是字串
獲取 get 資料
$data = $request->query();
$some = $request->query('key', 'default value')
//推薦使用get
$data = $request->get();
$some = $request->get('key','default value');
獲取 post 資料
$data = $request->post();
$some = $request->post('key', 'default value')
獲取 get & post 資料
$data = $request->input();
$some = $request->input('key', 'default value')
獲取上傳檔案
$file = $request->getUploadedFiles();//獲取的結果是一維陣列或者二位陣列
//陣列內容是 Swoft\Http\Message\Upload\UploadedFile 檔案物件,物件,物件
/**
* 檔案操作方法
* moveTo() 將上傳的檔案移動到新位置。
* getSize() 獲取檔案大小,單位 byte。
* getError() 獲取上傳檔案相關的錯誤資訊,若無錯將必須返回UPLOAD_ERR_OK 常量,若又錯誤將返回UPLOAD_ERR_XXX 相關常量。
* getClientFilename() 獲取檔案上傳時客戶端本地的檔名,不要相信此方法返回的值。
* getClientMediaType() 獲取客戶端中檔案的 MediaType 型別,不要相信此方法返回的值。
*/
其它一些方法
其他方法請檢視原始碼或者官方文件
if ($request->isAjax()) { // Do something } if ($request->isGet()) { // Do something } $contentType = $request->getContentType();
本作品採用《CC 協議》,轉載必須註明作者和本文連結