注入请求对象
在 Laravel 中,访问用户输入数据最常用的方式,就是通过注入到控制器方法中的 Illuminate\Http\Request 对象实例,通过该实例,我们可以访问所有用户请求数据,不管是什么方式,什么格式:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class RequestController extends Controller
{
public function form(Request $request)
{
// 通过 $request 实例获取请求数据
}
}
然后在路由文件中定义一个指向该控制器方法的路由:
Route::post('form', 'RequestController@form');
获取用户请求数据
获取所有请求数据
我们可以通过 $request->all() 获取所有请求数据:
public function form(Request $request)
{
// 通过 $request 实例获取请求数据
dd($request->all());
}
只获取部分请求数据
如果只想获取部分请求数据,可以通过 $request 实例上的 except 或 only 方法,这两个方法是相反的,一个用于排除指定字段,一个用于获取指定字段:
$request->except('id');
$request->only(['name', 'site', 'domain']);
判断是否包含指定字段
除此之外,我们还可以通过 $request 实例上的 has 或 exists 方法判断某个字段是否存在:
$id = $request->has('id') ? $request->get('id') : 0;
exists 方法是 has 方法的别名,两者调用方式一样,功能完全等效。
获取指定请求字段值
上面我们已经给出了获取指定字段值的一个方法 get,该方法只能获取通过 GET 请求传递的参数,同理,如果是 POST 请求的话,我们可以通过 post 方法获取对应字段值,此次之外,我们还可以通过 input 方法值,该方法可以从所有请求方式中获取给定字段的值,所以更加通用:
$id = $request->input('id');
$name = $request->input('name');
我们还可以为 input 方法传递第二个参数作为默认值,如果请求字段为空的话,则使用该默认值:
$site = $request->input('site', 'xxx');
我们可以通过「.」来分别获取每个数组元素:
$request->input('books.0');
$request->input('books.1');
甚至还支持更深层级的嵌套:
dump($request->input('books.0.author'));
dump($request->input('books.1'));






网友评论