验证表单的三种新姿势,估计你只用过一种

验证用户输入的数据是我们开发中最常见的需求,Goravel 提供三种验证姿势,个个简单好用!

第一种:简单直接式

根据表单内容直接校验:

func (r *PostController) Store(ctx http.Context) {
  validator, err := ctx.Request().Validate(map[string]string{
    "title": "required|max_len:255",
    "body": "required",
  })
}

第二种:自由定义式

自定义验证数据:

validator, err := facades.Validation.Make(map[string]any{
  "name": "Goravel",
}, map[string]string{
  "title": "required|max_len:255",
  "body":  "required",
})

第三种:优雅文艺式

使用命令 go run . artisan make:request StorePostRequest  创建一个「表单请求类」,并定义规则:

package requests

import (
  "github.com/goravel/framework/contracts/http"
  "github.com/goravel/framework/contracts/validation"
)

type StorePostRequest struct {
  Name string `form:"name" json:"name"`
}
// 验证授权
func (r *StorePostRequest) Authorize(ctx http.Context) error {
  return nil
}
// 定义规则
func (r *StorePostRequest) Rules() map[string]string {
  return map[string]string{
    "title": "required|max_len:255",
    "body":  "required",
  }
}
// 自定义错误信息
func (r *StorePostRequest) Messages() map[string]string {
  return map[string]string{}
}
// 自定义字段名
func (r *StorePostRequest) Attributes() map[string]string {
  return map[string]string{}
}
// 数据预处理
func (r *StorePostRequest) PrepareForValidation(data validation.Data) {

}

然后校验:

func (r *PostController) Store(ctx http.Context) {
  var storePost requests.StorePostRequest
  errors, err := ctx.Request().ValidateRequest(&storePost)
}

关于 Goravel

Goravel 是一个功能完备、具有良好扩展能力的 Web 应用程序框架。作为一个起始脚手架帮助 Golang 开发者快速构建自己的应用。

框架风格与 Laravel 保持一致,让 PHPer 不用学习新的框架,也可以愉快的玩转 Golang !致敬 Laravel !

Welcome star, PR and issues !

原创文章,作者:mantou,如若转载,请注明出处:https://v2ez.com/466.html

赞 (0)
mantoumantou
上一篇 2022年12月27日
下一篇 2022年12月29日

相关推荐

  • Nginx 反向代理ddns网站

    由于一些原因,需要反向代理一些ip经常变化的站点,最初以为只要把域名填好就行,ip变化的时候,nginx会根据ddns域名来回源,但是事实并非如此,在每一次更换ip地址之后,都要r…

    代码程序 2021年5月16日
  • Cloudflare R2+Workers!马上搭建自己的云上图床!

    结果图# 原理# 图源由 Cloudflare R2 托管,通过两个 Workers 连接 R2 以展示随机横屏/竖屏图片,静态页面引用 Workers 的 URL 以实现以上界面…

    2025年5月17日
  • Google cloud抢占式自动开机方法

    抢占式实例会自动关机是硬伤,大概3~5天会被关机,刚研究了一下,发现有一个东西叫实例时间表,这个东西可以自定义实例什么时间开机和关机,创建个时间表让他每小时开机一次抢占式实例就行了…

    2024年9月2日
  • 如何解决“SSH 退格键(Backspace)不能正常使用”的问题

    在我们使用远程工具的时候,有时候输入错误内容,如果想通过按退格键 Backspace 删除敲错的字母,却在屏幕显示出了“^H”,退格不行。 再按删除键,却显示出“^[[3~”,怎么…

    代码程序 2021年4月4日
  • vps解锁流媒体 dns方式解锁傻瓜式教学

    首先你得有一台又便宜解锁又好的落地鸡类似于这样的这台是海创的 论坛收的一年25人民币 接下来是实际操作 直接复制就行了 解锁机里面丢以下命令 wget –no-check-cer…

    2024年2月6日
  • ChatAIr-ChatGPT 客户端 TF 版发布

    市面上那么多 ChatGPT 客户端,为啥还要重复造轮子 先回答一个可能部分人看到标题就会想到的问题~ 嗯,市面上大部分三方客户端我都用过,用起来也很方便,只是,我长期使用下来后发…

    2023年9月26日
  • WordPress侧栏访客IP签名欢迎图小工具制作教程

    我看网上有很多人都分享过类似的签名图,但是都没有相应的制作教程。今天奇它博客@老白就分享一下“WordPress侧栏访客IP签名欢迎图小工具制作教程” 1. 直接引用版 缺点,不可…

    2022年3月15日
  • Azure双栈网络及纯IPV6教程

    前情提要: 采用Cli或者第三方API面板开机可实现双栈网络,本教程为Azure网站手动配置,可避免使用API被风控。我用于演示的服务器是 基本 动态 IPV4 的香港机器,其它情…

    2024年3月6日
  • WordPress导航菜单添加小字hot、new、推荐等

    如果你看到别人的WordPress网站,导航菜单有小字,也叫角标,自己不知道怎么添加,那么下面的教程可以让你也用上。 比如我网站上的限时优惠和感谢打赏这两个小字都是一样的方式实现的…

    代码程序 2021年3月21日
  • 分享个bing壁纸项目

    https://github.com/androidmumo/bing这老哥5年前我就用了他做的第一版本,23年底发现更新了果断部署前段时间改了下代码采集了2010年到现在的壁纸数…

    2025年4月5日

发表回复

登录后才能评论