How部分
1. 接收请求
1.1 Request 基本使用
要通过 依赖注入 获取当前 HTTP 请求实例,你应该在控制器上引入 Illuminate\Http\Request
类。传入的请求实例将会由 服务容器 自动注入。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function store(Request $request)
{
$name = $request->input('name');
//
}
}
1.2 Request 的常用方法
路由部分
// GET 方式请求,输出结果对应 Part one
Route::get('test/request', 'App\Http\Controllers\TestController@testGet');
// POST 方式请求,输出结果对应 Part Two
Route::post('test/request', 'App\Http\Controllers\TestController@testPost');
控制器部分
<?php
use Illuminate\Http\Request;
class TestController extends Controller
{
// Part One: 针对 url(GET | http://127.0.0.1:8000/test/request?name=bert)
public function testGet(Request $request)
{
// 获取请求路径(路由中的 uri 部分)
$request->path(); //打印输出:"test/request"
// 获取请求的 url(不带 get 请求参数)
$request->url(); //打印输出:"http://127.0.0.1:8000/test/request"
// 获取完整的 url(带 get 请求参数)
$request->fullUrl(); //打印输出:"http://127.0.0.1:8000/test/request?name=bert"
// 获取 request 请求方式
$request->method(); //打印输出:"GET"
// 或请求端口
$request->getPort(); //打印输出:8000
}
// Part Two: 针对 url(Post | http://127.0.0.1:8000/test/request?company=Tencent&name=bert&finger=king)
/**
* form-data参数:
* name=kinra
* option[]=A
* option[]=B
* option[]=C
* key=null
*/
public function testPost(Request $request) {
// 获取请求路径
dump($request->path()); //打印输出:"test/request"
// 获取请求的 url(不带参数)
dump($request->url()); //打印输出:"http://127.0.0.1:8000/test/request"
// 获取完整的 url(带参数)
dump($request->fullUrl()); //打印输出:"http://127.0.0.1:8000/test/request?company=anflk&finger=king&name=bert"
// 获取请求方法
dump($request->method()); //打印输出:"POST"
// 获取请求接口
dump($request->getPort()); //打印输出:8000
// 获取请求要求返回的格式
dump($request->format()); //打印输出:"html"
// 获取请求参数。
dump($request->query()); //打印输出:["company" => "Tencent", "name" => "bert", "finger" => "king"]
dump($request->input()); //打印输出:["name" => "kinra", "option" => [0 => "A", 1 => "B", 2 => "C"], "key" => null, "company" => "Tencent", "finger" => "king"]
dump($request->all()); //打印输出:["name" => "kinra", "option" => [0 => "A", 1 => "B", 2 => "C"], "key" => null, "company" => "Tencent", "finger" => "king"]
// 获取某一请求参数的值
dump($request->input('company')); //打印输出:"Tencent"
dump($request->company); //打印输出:"Tencent"
dump($request->input('name')); //打印输出:"kinra"
dump($request->query('name')); //打印输出:"bert"
// 获取请求参数是数组,其中的某个值
dump($request->input('option.0')); //打印输出:"A"
// 判断输入值是否存在
// Ⅰ. has 来判断当前请求中是否含有指定的值
dump($request->has('name')); //打印输出:true
dump($request->has('namd')); //打印输出:false
// Ⅱ. 当给定一个数组时,has 将会判断指定的值是否全部存在
dump($request->has(['name', 'company'])); //打印输出:true
dump($request->has(['name', 'email'])); //打印输出:false
// Ⅲ. hasAny 方法将会在指定的值有一个存在的情况下返回 true
dump($request->hasAny(['name', 'email'])); //打印输出:true
dump($request->hasAny(['pwd', 'email'])); //打印输出:false
// Ⅳ. 如果你想要判断一个值在请求中是否存在,并且不为空,可以使用 filled 方法
dump($request->filled('name')); //打印输出:true
dump($request->filled('key')); //打印输出:false
}
}
注意:
- 当处理包含数组的表单时,可以使用 . 运算符来访问数组的数据
input 方法可以从整个请求体中获取数据(包括查询字符串), 而 query 方法仅仅从查询字符串中获取输入值。从上面的这两个方法可看出区别
。dump($request->input('name')); //打印输出:"kinra" dump($request->query('name')); //打印输出:"bert"
与 POST 请求参数同名的 GET 请求参数,其值会被 POST 请求的同名参数覆盖
。
1.3 获取旧数据
Laravel 允许你在两次请求之间保持数据。这个特性在有效性校验出错后重新填充表单时非常有用。
使用旧数据的前提:上一次(pre)请求的输入被闪存到 session 中,那么紧接着上次请求的本次(this) request 请求,可通过 old() 函数获取上次(pre)请求的输入,下次(next)请求无法获取上一次(pre)请求的输入,但如果本次(this)请入有输入且被闪存,则下次(next)请求可以获取本次(this)请求的输入。
// 将本次请求输入闪存到 session 中,供下次请求使用这些输入。 $request->flash(); //全部输入数据闪存到 session $request->flashOnly(['name', 'email']); //只将 name、email 闪存到session中 $request->flashExcept(['name', 'email']); //将除 name、email 以外的其他输入数据闪存到session中
重定向时可使用 withInput() 进行链式调用,此时无需再调用 $request->flash();
// 控制器中的一个函数。 public function testSession(Request $request) { // $request->flash(); return redirect('test/request')->withInput(); } // 上面函数等同于下面这个函数 public function testSession(Request $request) { $request->flash(); return redirect('test/request'); }
获取上次闪存到 session 的输入数据
$request->old(); //获取上次闪存到 session 的全部输入数据,返回类型:数组 $request->old('username'); //获取上次请求输入的 username 的值
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。