多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
目录 [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"; } } ```