使用额外的请求类可以定义在请求到达控制器之前检查的验证规则。您还可以在请求类中处理授权。例如:
class UpdateAccountEmail extends FormRequest
{
public function authorize()
{
return true; // authorization is handled on route/middleware level
}
public function rules()
{
return [
'new_email' => 'required|email|confirmed',
'new_email_confirmation' => 'required',
];
}
}
因此,总结一下:对于没有需要验证的有效负载的请求,使用自定义请求类是没有意义的。这意味着,对于正常人来说
GET
我们很可能(当然也有例外)希望使用
Request
等级由拉勒维尔提供。这样的控制器很正常:
class AccountController
{
public function show(Request $request)
{
return view('account.show', ['user' => $request->user()]);
}
public function edit()
{
return view('account.edit', ['user' => \Auth::user()]);
}
public function updateEmail(UpdateAccountEmail $request)
{
$user = $request->user();
$user->email = $request->input('new_email');
$user->save();
return redirect()->route('account.index');
}
public function logins(Request $request)
{
$logins = $request->user()->logins()
->when($request->get('filter_from'), function ($query, $from) {
$query->where('created_at', '>=', $from);
})
->when($request->get('filter_until'), function ($query, $until) {
$query->where('created_at', '<=', $until);
})
->get();
return view('account.logins', ['logins' => $logins]);
}
}
如你所见,为了
得到
由处理的请求
logins(Request $request)
,我们不使用自定义请求类,因为我们不需要验证任何内容(我们可以验证筛选器参数,但为了简单起见,我们不需要验证)。
上面的示例还显示了检索当前用户的不同方法。即便如此,你也不需要任何请求。
这不是实际的生产代码,只是我脑子里想出来的。。。