- Created by 郭强, last modified on Mar 17, 2022
校验对象
数据校验组件提供了数据校验对象,用于数据校验的统一的配置管理、便捷的链式操作。
接口文档: https://pkg.go.dev/github.com/gogf/gf/v2/util/gvalid
type Validator func New() *Validator func (v *Validator) Assoc(assoc interface{}) *Validator func (v *Validator) Bail() *Validator func (v *Validator) Ci() *Validator func (v *Validator) Clone() *Validator func (v *Validator) Data(data interface{}) *Validator func (v *Validator) I18n(i18nManager *gi18n.Manager) *Validator func (v *Validator) Messages(messages interface{}) *Validator func (v *Validator) RuleFunc(rule string, f RuleFunc) *Validator func (v *Validator) RuleFuncMap(m map[string]RuleFunc) *Validator func (v *Validator) Rules(rules interface{}) *Validator func (v *Validator) Run(ctx context.Context) Error
简要说明:
New
方法用于创建一个新的校验对象。Assoc
用于关联数据校验,具体请查看后续章节介绍。Bail
方法用于设定只要后续的多个校验中有一个规则校验失败则停止校验立即返回错误结果。Ci
方法用于设置需要比较数值的规则时,不区分字段的大小写。Run
方法对给定规则和信息的数据进行校验操作。I18n
方法用于设置当前校验对象的I18N
国际化组件。默认情况下,校验组件使用的是框架全局默认的i18n
组件对象。Data
方法用于传递需要联合校验的数据集合,往往传递的是map
类型或者struct
类型。Rules
方法用于传递当前链式操作校验的自定义校验规则,往往使用[]string
类型或者map
类型。Messages
方法用于传递当前链式操作校验的自定义错误提示信息,往往使用map
类型传递,具体看后续代码示例。
由于数据校验对象也是一个非常常用的对象,因此g
模块中定义了Validator
方法来快捷创建校验对象。大部分场景下我们推荐使用g
模块的g.Validator()
方式来快捷创建一个校验对象,关于g
模块的介绍请参考章节:对象管理
使用示例
单数据校验
var ( err error ctx = gctx.New() ) err = g.Validator(). Rules("min:18"). Data(16). Messages("未成年人不允许注册哟"). Run(ctx) fmt.Println(err.Error()) // Output: // 未成年人不允许注册哟
var ( err error ctx = gctx.New() data = g.Map{ "password": "123", } ) err = g.Validator().Data("").Assoc(data). Rules("required-with:password"). Messages("请输入确认密码"). Run(ctx) fmt.Println(err.Error())
Struct
数据校验
type User struct { Name string `v:"required#请输入用户姓名"` Type int `v:"required#请选择用户类型"` } var ( err error ctx = gctx.New() user = User{} data = g.Map{ "name": "john", } ) if err = gconv.Scan(data, &user); err != nil { panic(err) } err = g.Validator().Assoc(data).Data(user).Run(ctx) if err != nil { fmt.Println(err.(gvalid.Error).Items()) } // Output: // [map[Type:map[required:请选择用户类型]]]
Map
数据校验
params := map[string]interface{}{ "passport": "", "password": "123456", "password2": "1234567", } rules := map[string]string{ "passport": "required|length:6,16", "password": "required|length:6,16|same:password2", "password2": "required|length:6,16", } messages := map[string]interface{}{ "passport": "账号不能为空|账号长度应当在{min}到{max}之间", "password": map[string]string{ "required": "密码不能为空", "same": "两次密码输入不相等", }, } err := g.Validator().Messages(messages).Rules(rules).Data(params).Run(gctx.New()) if err != nil { g.Dump(err.Maps()) }
执行后,终端输出:
{ "passport": { "length": "账号长度应当在6到16之间", "required": "账号不能为空" }, "password": { "same": "两次密码输入不相等" } }
Content Menu
- No labels
1 Comment
hanwei
结构体存在嵌套字段,拿在map中如何自定义错误啊