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'],
        'category_id' => ['nullable', 'exists:categories,id'],
    ];
}

注意:exists:categories,id 表示该值必须存在于 categories 表的 id 字段中;nullable 允许为空但不校验其他规则。

可选:添加自定义错误消息和验证前钩子

你可以在同一请求类中补充:

  • messages():返回自定义错误提示(键名格式为 "字段名.规则名"
  • withValidator():在验证执行后、抛出异常前对 Validator 实例做扩展(比如动态添加规则)
  • authorize():控制是否允许当前用户发起该请求(返回 truefalse

示例:

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怎么判断请求类型_Laravel Request isMethod用法  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  Laravel中的withCount方法怎么高效统计关联模型数量  如何获取上海专业网站定制建站电话?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  如何在云主机快速搭建网站站点?  网页设计与网站制作内容,怎样注册网站?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  如何在IIS中新建站点并配置端口与物理路径?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  微信推文制作网站有哪些,怎么做微信推文,急?  Laravel如何处理表单验证?(Requests代码示例)  微信公众帐号开发教程之图文消息全攻略  Python文件操作最佳实践_稳定性说明【指导】  教学论文网站制作软件有哪些,写论文用什么软件 ?  如何在云主机上快速搭建多站点网站?  Laravel如何配置任务调度?(Cron Job示例)  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  网站制作软件有哪些,制图软件有哪些?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  如何正确下载安装西数主机建站助手?  Android Socket接口实现即时通讯实例代码  如何实现javascript表单验证_正则表达式有哪些实用技巧  如何正确选择百度移动适配建站域名?  如何快速辨别茅台真假?关键步骤解析  如何快速搭建自助建站会员专属系统?  音响网站制作视频教程,隆霸音响官方网站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何用y主机助手快速搭建网站?  jQuery validate插件功能与用法详解  晋江文学城电脑版官网 晋江文学城网页版直接进入  JavaScript如何实现路由_前端路由原理是什么  如何在IIS管理器中快速创建并配置网站?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  开心动漫网站制作软件下载,十分开心动画为何停播?  PHP 500报错的快速解决方法  如何在Windows服务器上快速搭建网站?  jQuery中的100个技巧汇总  如何在阿里云高效完成企业建站全流程?  个人摄影网站制作流程,摄影爱好者都去什么网站?  Android仿QQ列表左滑删除操作  微信小程序制作网站有哪些,微信小程序需要做网站吗?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  北京的网站制作公司有哪些,哪个视频网站最好?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  javascript中闭包概念与用法深入理解  如何在宝塔面板中创建新站点?