目录
[TOC]
## 获取请求
Requests 实例包含所有请求相关的信息,你可以在路由闭包和控制器方法中使用它。
直接创建实例对象:
```php
use WorkerF\Http\Route;
use WorkerF\Http\Requests;
Route::get('/a', function() {
$request = new Requests();
return $request->post();
});
```
使用依赖注入:
```php
namespace App\Controller;
use App\Controller\Controller;
use WorkerF\Http\Requests;
class TestController extends Controller
{
public function test(Requests $request)
{
return $request->post();
}
}
```
## 获取请求数据
我们通常需要获取请求中的 get、post 数据,请求 IP、Path、Url 等信息,这里介绍一些获取这些信息的方法:
```php
namespace App\Controller;
use App\Controller\Controller;
use WorkerF\Http\Requests;
class TestController extends Controller
{
public function getRequestInfo(Requests $request)
{
$requestInfo = [];
$requestInfo['get'] = $request->get(); // 获取 GET 请求参数
$requestInfo['post'] = $request->post(); // 获取 POST 请求参数
$requestInfo['request'] = $request->request(); // 获取 REQUEST 请求参数
$requestInfo['server'] = $request->server(); // 获取服务器信息
$requestInfo['cookie'] = $request->cookie(); // 获取 cookie
$requestInfo['rawData'] = $request->rawData(); // 获取请求主体原生字符串 (请求传 json、xml 时很好用)
$requestInfo['method'] = $request->method(); // 获取请求的方法
$requestInfo['isHttps'] = $request->isHttps(); // 检测请求是否是 https 请求
$requestInfo['url'] = $request->url(); // 获取请求 url (不带请求参数字符串)
$requestInfo['fullUrl'] = $request->fullUrl(); // 获取请求完整的 url (请求参数字符串)
$requestInfo['path'] = $request->path(); // 获取请求的路径
$requestInfo['queryString'] = $request->queryString(); // 获取请求字符串
$requestInfo['ip'] = $request->ip(); // 获取请求客户端的 ip 地址
return $requestInfo;
}
}
```
执行结果类似如下:
```json
{
"get": {
"a": "12",
"b": "20"
},
"post": {},
"request": {
"a": "12",
"b": "20"
},
"server": {
"QUERY_STRING": "a=12&b=20",
"REQUEST_METHOD": "GET",
"REQUEST_URI": "/?a=12&b=20",
"SERVER_PROTOCOL": "HTTP/1.1",
"SERVER_SOFTWARE": "workerman/3.5.1",
"SERVER_NAME": "192.168.10.10",
"HTTP_HOST": "192.168.10.10:9999",
"HTTP_USER_AGENT": "PostmanRuntime/7.1.1",
"HTTP_ACCEPT": "*/*",
"HTTP_ACCEPT_LANGUAGE": "",
"HTTP_ACCEPT_ENCODING": "gzip, deflate",
"HTTP_COOKIE": "",
"HTTP_CONNECTION": "keep-alive",
"REMOTE_ADDR": "192.168.10.1",
"REMOTE_PORT": 61934,
"REQUEST_TIME": 1530616312,
"HTTP_CACHE_CONTROL": "no-cache",
"HTTP_POSTMAN_TOKEN": "eb54c1dd-0a07-4ec7-900a-683e17e7d9eb",
"SERVER_PORT": "9999"
},
"cookie": {},
"rawData": "",
"method": "GET",
"isHttps": false,
"url": "http://192.168.10.10:9999/",
"fullUrl": "http://192.168.10.10:9999/?a=12&b=20",
"path": "/",
"queryString": "a=12&b=20",
"ip": "192.168.10.1"
}
```
获取 request 请求参数 (包含 get 和 post 参数) 时,你也可以通过使用 Requests 实例访问属性获取:
```php
namespace App\Controller;
use App\Controller\Controller;
use WorkerF\Http\Requests;
class TestController extends Controller
{
public function test(Requests $request)
{
// 获取请求参数 name
$name = $request->name;
// 获取请求参数 age
$age = $request->age;
return "name: $name, age: $age";
}
}
```
## 文件上传
你可以使用 Requests 实例的 file($name) 方法获得上传的文件信息,该方法返回一个 WorkerF\Http\File 对象。当文件不存在时,返回 null。
如果使用 imput multiple 上传多个文件,那么 file($name) 方法获得的是一个包含多个 WorkerF\Http\File 对象的数组,需要遍历进行处理。
你可以使用 File 对象的 move($targetPath, $targetName) 方法将文件保存到指定位置。
例子:
```php
namespace App\Controller;
use App\Controller\Controller;
use WorkerF\Http\Requests;
class TestController extends Controller
{
public function test(Requests $request)
{
// 获取请求文件
$image = $request->file('image');
// 获取文件名称
$file_name = $image->getFileName();
// 获取文件大小
$file_size = $image->getFileSize();
// 获取文件类型
$file_type = $image->getFileType();
// 移动文件到目录
$image->move('/tmp/upload/', $file_name);
return "something";
}
}
```