Form Request用于分离验证逻辑,通过artisan命令生成类,定义rules、messages和authorize方法,在控制器中注入使用,自动验证并返回错误信息,使代码更清晰易维护。

在 Laravel 中,Form Request 是一种专门用于处理表单验证的类,它将验证逻辑从控制器中分离出来,使代码更清晰、更易于维护。通过创建自定义的 Form Request 类,你可以集中管理验证规则、错误消息和授权逻辑。
创建 Form Request 类
使用 Artisan 命令可以快速生成一个 Form Request 类:
artisan make:request StoreUserRequest该命令会在 app/Http/Requests 目录下生成 StoreUserRequest.php 文件(如果目录不存在会自动创建)。
定义验证规则
打开生成的 Request 类,找到 rules() 方法,在其中返回需要的验证规则:
public function rules(){
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8|confirmed',
];
}
这些规则会自动在请求提交时生效。
自定义错误消息
你可以在 Request 类中重写 messages() 方法,为特定字段定义更友好的错误提示:
public function messages(){
return [
'name.required' => '姓名不能为空',
'email.email' => '请输入有效的邮箱地址',
'password.min' => '密码至少需要 8 位',
];
}
控制访问权限(可选)
如果你希望限制谁可以提交这个表单,可以修改 authorize() 方法:
public function authorize(){
// 例如:只有管理员可以创建用户
return $this->user()->hasRole('admin');
}
返回 false 时会抛出 403 禁止访问异常。
在控制器中使用 Form Request
在控制器方法中,直接将 Form Request 类作为参数注入,Laravel 会自动执行验证:
use App\Http\Requests\StoreUserRequest;public function store(StoreUserRequest $request)
{
// 验证已通过,可以直接使用数据
$validated = $request->validated();
User::create($validated);
return redirect('/users');
}
如果验证失败,Laravel 会自动重定向回上一页,并将错误信息存入 session,前端可通过 $errors 变量获取并显示。
基本上就这些。用 Form Request 能让控制器更干净,验证逻辑更集中,适合中大型项目使用。










