swoft request请求
获取 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");//返回值是字符串
$headers = $request->getHeaders();
foreach ($headers as $name => $values) {
echo $name . ": " . implode(", ", $values).PHP_EOL;
}
获取 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 类型,不要相信此方法返回的值。客户端可能会发送恶意虚假文件名,意图破坏或破解您的应用程序。
*/
获取的结果是一维数组或者二位数组,数据结构如下。 若表单中上传的是单文件则返回的是一个一维数组,数组内容是 Swoft\Http\Message\Upload\UploadedFile 文件对象,例如文件字段名为 file 则数据结构如下
array(1) {
["file"]=>
object(Swoft\Http\Message\Upload\UploadedFile)#6510 (7) {
["size":"Swoft\Http\Message\Upload\UploadedFile":private]=>
int(1319)
["errorCode":"Swoft\Http\Message\Upload\UploadedFile":private]=>
int(0)
["file":"Swoft\Http\Message\Upload\UploadedFile":private]=>
string(25) "/tmp/swoole.upfile.f7p2EL"
["clientFilename":"Swoft\Http\Message\Upload\UploadedFile":private]=>
string(6) "at.png"
["clientMediaType":"Swoft\Http\Message\Upload\UploadedFile":private]=>
string(9) "image/png"
["moved":"Swoft\Http\Message\Upload\UploadedFile":private]=>
NULL
["path":"Swoft\Http\Message\Upload\UploadedFile":private]=>
NULL
}
}
若表单中是一个字段数组上传多个文件如 file[] 则返回的是一个二维数组,数组内容依然是 Swoft\Http\Message\Upload\UploadedFile 文件对象,数据结构如下
array(1) {
["file"]=>
array(2) {
[0]=>
object(Swoft\Http\Message\Upload\UploadedFile)#6516 (7) {
["size":"Swoft\Http\Message\Upload\UploadedFile":private]=>
int(1319)
["errorCode":"Swoft\Http\Message\Upload\UploadedFile":private]=>
int(0)
["file":"Swoft\Http\Message\Upload\UploadedFile":private]=>
string(25) "/tmp/swoole.upfile.TVKdOS"
["clientFilename":"Swoft\Http\Message\Upload\UploadedFile":private]=>
string(6) "at.png"
["clientMediaType":"Swoft\Http\Message\Upload\UploadedFile":private]=>
string(9) "image/png"
["moved":"Swoft\Http\Message\Upload\UploadedFile":private]=>
NULL
["path":"Swoft\Http\Message\Upload\UploadedFile":private]=>
NULL
}
...
}
}
其它的方法
if ($request->isAjax()) {
// Do something
}
if ($request->isXmlHttpRequest()) {
// Do something
}
if ($request->isGet()) {
// Do something
}
if ($request->isPost()) {
// Do something
}
if ($request->isPut()) {
// Do something
}
if ($request->isDelete()) {
// Do something
}
if ($request->isPatch()) {
// Do something
}
$contentType = $request->getContentType();