1. 基本操作
重新创建一个路由 my2.php 用于路由测试,然后创建一个新的控制器 my/UserController
1.1 new Request()
控制器
<?phpnamespace App\Http\Controllers\my;use App\Http\Controllers\Controller;use Illuminate\Http\Request;class UserController extends Controller{// 1. 方式1 newpublic function fun1(){$request = new Request();dump($request);}}
<br />**路由**
<?phpRoute::namespace('my')->group(function () {Route::get('fun1', 'UserController@fun1');});
测试
1.2 构造器注入
控制器
<?phpnamespace App\Http\Controllers\my;use App\Http\Controllers\Controller;use Illuminate\Http\Request;class UserController extends Controller{private $request;// 2. 方式2 构造函数注入public function __construct(){$this->request = new Request();}public function fun2(){dump($this->request);}}
路由
<?phpRoute::namespace('my')->group(function () {Route::get('fun2', 'UserController@fun2');});
测试
1.3 请求路径相关
- Request->path():返回额是请求的路径
- Request->url():不含查询字符串的URL
- Request->fullUrl():完整的URL地址含有查询字符串
路由
<?phpRoute::namespace('my')->group(function () {Route::get('fun3', 'UserController@fun3');});
控制器
<?phpnamespace App\Http\Controllers\my;use App\Http\Controllers\Controller;use Illuminate\Http\Request;class UserController extends Controller{// 依赖注入的方式public function fun3(Request $request){dump($request->path());dump($request->url());dump($request->fullUrl());}}
测试
1.4 获取和判断请求的方法
- $request->method()
- 获取http请求的方法
- 返回值:返回大写请求的方式 String。
- $request->isMethod()
- 传递参数:请求的方式,String
- 返回值:boolean
return $this->getMethod() === strtoupper($method);
控制器
<?php// 依赖注入控制器public function fun4(Request $req){$method = $req->method();echo $method . "\r";if($req->isMethod('get')) {return '这是get请求';}if($req->isMethod('post')) {return '这是post请求';}if($req->isMethod('put')) {return '这是put请求';}if($req->isMethod('delete')) {return '这是delete请求';}}
路由
<?php/*** 请求中的方法*/Route::namespace('my')->group(function () {Route::get('fun4', 'UserController@fun4');Route::post('fun4', 'UserController@fun4');Route::delete('fun4', 'UserController@fun4');Route::put('fun4', 'UserController@fun4');});
测试
| HTTP 请求 | POSTMAN 测试图片 |
|---|---|
| get | ![]() |
| post | ![]() |
| put | ![]() |
| delete | ![]() |
1.5 获取输入的数据
all()
- 获取全部的数据,返回的是一个数组
- 哪怕是指定一个key,返回的也是一个数组
控制器
<?php// 获取输入的数据public function fun5(Request $req){echo "all() \r";var_dump($req->all());}
路由
<?php/*** all()*/Route::namespace('my')->group(function () {Route::post('fun5', 'UserController@fun5');});
测试返回全部数据
限制只获取name**
input()
- 可以指定返回其中的一个数据
- 默认不加参数
- 返回的是一个数组,和all()一样
- 添加参数name
- 返回指定的参数,数据类型是这个数据的数据类型
- 添加参数可能不存在的默认参数
- 如果不存在,第二个参数就会作为默认值

当处理包含数组的表单时,可以使用 「.」 运算符来访问数组的数据:
<?php$name = $request->input('products.0.name');$names = $request->input('products.*.name');
query()
input 方法可以从整个请求体中获取数据(包括查询字符串), 而 query 方法仅仅从查询字符串中获取输入值:用法上input()和query() 差不多
<?php$name = $request->query('name');$name = $request->query('name', 'Helen');$query = $request->query();
通过动态属性获取输入
当使用动态属性时,Laravel 将会先从请求体中查找参数。如果该值不存在,则从路由参数中查找。
<?php$name = $request->name;
2. 获取数据的其他方式
获取 JSON 输入
当向应用传递 JSON 请求时,只要将请求头中的 Content-Type 设置为 application/json 后你便可以使用 input 方法来获取 JSON 数据。你也可以使用「.」语法获取 JSON 数组内容:
<?php$name = $request->input('user.name');
获取输入中的布尔值
当处理诸如 checkbox 类的 HTML 元素时,你的应用可能获取到以字符串形式传递的 “真假值”,例如 “true” 或者 “on”。为了方便,你可以使用 bool 方法来将这些值转换布尔类型。boolean 方法将会把 1, 「1」, true, 「true」, 「on」, 和 「yes」返回为 true。而其他值将会返回 false:
<?php$archived = $request->boolean('archived');
获取部分输入数据
如果需要获取输入数据的子集,你可以使用 only 或 except 方法。它们接受单个 array 或者动态参数列表:
<?php$input = $request->only(['username', 'password']);$input = $request->only('username', 'password');$input = $request->except(['credit_card']);$input = $request->except('credit_card');
判断输入值是否存在
你可以使用 has 来判断当前请求中是否含有指定的值。如果请求中存在该值则 has 方法将会返回 true:
<?phpif ($request->has('name')) {//}
当给定一个数组时,has 将会判断指定的值是否全部存在:
<?phpif ($request->has(['name', 'email'])) {//}
hasAny 方法将会在指定的值有一个存在的情况下返回 true:
<?phpif ($request->hasAny(['name', 'email'])) {//}
3. 旧数据
Laravel 允许你在两次请求之间保持数据。这个特性在有效性校验出错后重新填充表单时非常有用。不过,如果你使用 Laravel 自带的 特性验证 , 不需要自己手动调用这些方法因为一些 Laravel 内置的验证功能会自动调用它们。
将输入数据闪存到 Session
Illuminate\Http\Request 类的 flash 方法可以把当前的输入闪存到 session,因此在用户向应用发起的下一次请求时它们仍然可用:
<?php$request->flash();
你也可以使用 flashOnly 方法和 flashExcept 方法将请求数据的子集传送给 session。这些方法在将密码之类的敏感数据排除在 session 外的情况下挺实用的:
<?php$request->flashOnly(['username', 'email']);$request->flashExcept('password');
闪存数据并跳转
如果你需要经常保存输入到 session 然后重定向到之前的页面,可以通过在跳转函数后链式调用 withInput 方法轻易地实现::
<?phpreturn redirect('form')->withInput();return redirect('form')->withInput($request->except('password'));
获取旧数据
若要获取上一次请求所保存的旧数据,可以在 Request 的实例上使用 old 方法。old 方法会从 [session] 取出之前被闪存的输入数据 (/docs/laravel/7.x/session):
<?php$username = $request->old('username');
Laravel 也提供了全局辅助函数 old。如果你要在 Blade 模板 中显示旧的输入,使用 old 辅助函数将会更加方便。如果给定字段没有旧的输入,则会返回 null:
<input type="text" name="username" value="{{ old('username') }}">




