Laravel中推荐使用表单请求类进行统一验证:一、用php artisan make:request生成类;二、在rules()中定义验证规则;三、在authorize()中设置权限逻辑;四、用messages()自定义错误提示;五、在控制器方法中类型提示该请求类即可自动验证。

如果您在Laravel项目中需要对HTTP请求数据进行统一、可复用的验证,表单请求类(Form Request)是一种标准且推荐的方式。以下是实现请求表单请求类的具体方法:
一、生成表单请求类
通过Artisan命令可快速创建一个继承自Illuminate\Foundation\Http\FormRequest的类,该类默认包含authorize()和rules()两个核心方法,用于权限检查与验证规则定义。
1、在终端中执行命令:php artisan make:request StoreUserRequest
2、Laravel将在app/Http/Requests目录下生成StoreUserRequest.php文件
3、打开该文件,确认其已自动引入Illuminate\Foundation\Http\FormRequest基类
二、定义验证规则
在生成的表单请求类中,需重写rules()方法,返回一个关联数组,键为字段名,值为对应验证规则字符串或规则数组。
1、在rules()方法中返回如下数组:return ['name' => 'required|string|max:255', 'email' => 'required|email|unique:users'];
2、支持使用管道符分隔多个规则,也可使用Rule::unique()等扩展语法增强灵活性
3、如需动态规则(例如更新时排除当前记录),可在rules()中调用$this->route('id')获取路由参数
三、设置授权逻辑
authorize()方法决定当前用户是否有权发起该请求,返回布尔值;若返回false,将直接响应403状态码,不进入验证流程。
1、在authorize()方法中编写权限判断逻辑:return auth()->check() && auth()->user()->can('create', User::class);
2、若无需权限控制,可直接返回true
3、若依赖模型策略(Policy),确保对应策略已注册并在AuthServiceProvider中映射
四、自定义错误消息
可通过重写messages()方法,为特定字段或规则提供更友好的中文提示,覆盖默认验证消息。
1、在类中添加public function messages()方法
2、返回关联数组,键格式为"字段名.规则名",例如:'email.required' => '邮箱地址不能为空'
3、支持通配符,如'*.max' => '字段长度不能超过 :max 个字符'
五、在控制器中使用表单请求类
将自定义的表单请求类作为控制器方法的参数类型提示,Laravel会自动执行授权与验证,并在失败时抛出ValidationException,返回422响应。
1、在控制器方法签名中注入请求类:public function store(StoreUserRequest $request)
2、此时$request->validated()可安全获取已过滤并验证通过的数据
3、若需获取原始输入(含未通过验证字段),仍可调用$request->all(),但需自行校验

















