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();

swoft学习笔记之request请求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值