Laravel如何处理表单验证?(Requests代码示例)
发布时间 - 2025-12-16 00:00:00 点击率:次Laravel 推荐使用 Form Request 封装表单验证逻辑,通过 php artisan make:request 生成请求类,在 rules() 中定义规则(如 title.required、content.min),支持 messages() 自定义提示、authorize() 控制权限,并在控制器中类型提示自动验证。
在 Laravel 中,表单验证推荐使用 Form Request(自定义请求类)来封装验证逻辑,它让控制器更干净、验证更复用、错误响应更统一。
创建 Form Request 类
运行 Artisan 命令生成一个专门处理表单验证的请求类:
php artisan make:request StorePostRequest该命令会在 app/Http/Requests 目录下生成一个 PHP 类,Laravel 会自动为你填充基础结构。
定义验证规则(rules() 方法)
打开刚生成的 StorePostRequest.php,在 rules() 方法中写入字段规则。例如提交文章时验证标题和内容:
public function rules()
{
return [
'title' => ['required', 'string', 'max:255'],
'content' => ['required', 'string', 'min:10'],
'catego
ry_id' => ['nullable', 'exists:categories,id'],
];
}
注意:exists:categories,id 表示该值必须存在于 categories 表的 id 字段中;nullable 允许为空但不校验其他规则。
可选:添加自定义错误消息和验证前钩子
你可以在同一请求类中补充:
-
messages():返回自定义错误提示(键名格式为"字段名.规则名") -
withValidator():在验证执行后、抛出异常前对 Validator 实例做扩展(比如动态添加规则) -
authorize():控制是否允许当前用户发起该请求(返回true或false)
示例:
public function authorize()
{
return auth()->check(); // 仅登录用户可提交
}
public function messages()
{
return [
'title.required' => '标题不能为空',
'content.min' => '内容至少需要 :min 个字符',
];
}
在控制器中使用
直接将请求类类型提示到控制器方法参数中,Laravel 会自动执行验证。验证失败时自动重定向并返回错误(Web)或返回 422 JSON 响应(API):
use App\Http\Requests\StorePostRequest;
public function store(StorePostRequest $request)
{
$validated = $request->validated(); // 获取已验证的数据(自动过滤未声明字段)
Post::create($validated);
return redirect()->route('posts.index')->with('success', '文章已发布');
}
无需手动调用 $request->validate(...),所有逻辑已解耦到请求类中。
基本上就这些 —— Form Request 是 Laravel 推荐的标准做法,既清晰又易维护,尤其适合中大型项目中的表单场景。
# php
# laravel
# js
# json
# go
# app
# red
# 封装
# 表单验证
# Nullable
# http
# 自定义
# 表单
# 推荐使用
# 为空
# 类中
# 器中
# 你可以
# 为你
# 会在
# 并在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
音乐网站服务器如何优化API响应速度?
如何在IIS中配置站点IP、端口及主机头?
如何用低价快速搭建高质量网站?
如何为不同团队 ID 动态生成多个非值班状态按钮
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Laravel如何处理CORS跨域请求?(配置示例)
个人摄影网站制作流程,摄影爱好者都去什么网站?
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何快速搭建高效WAP手机网站吸引移动用户?
怎么用AI帮你为初创公司进行市场定位分析?
如何在宝塔面板中修改默认建站目录?
Android自定义控件实现温度旋转按钮效果
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
Python自动化办公教程_ExcelWordPDF批量处理案例
如何在云主机快速搭建网站站点?
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
Internet Explorer官网直接进入 IE浏览器在线体验版网址
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Java遍历集合的三种方式
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
Android中AutoCompleteTextView自动提示
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
iOS正则表达式验证手机号、邮箱、身份证号等
*服务器网站为何频现安全漏洞?
千库网官网入口推荐 千库网设计创意平台入口
Android 常见的图片加载框架详细介绍
如何快速搭建高效服务器建站系统?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
历史网站制作软件,华为如何找回被删除的网站?
php结合redis实现高并发下的抢购、秒杀功能的实例
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
php打包exe后无法访问网络共享_共享权限设置方法【教程】
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
如何快速生成可下载的建站源码工具?
Python结构化数据采集_字段抽取解析【教程】
JS中对数组元素进行增删改移的方法总结
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
网站建设整体流程解析,建站其实很容易!
EditPlus中的正则表达式实战(5)
如何快速配置高效服务器建站软件?
nginx修改上传文件大小限制的方法
如何在阿里云域名上完成建站全流程?


ry_id' => ['nullable', 'exists:categories,id'],
];
}