创新互联GoFrame教程:GoFrame数据校验-递归校验

gvalid​校验组件支持强大的递归校验特性。如果给定的校验数据中的属性或者键值为​struct/map/slice​类型时,将会被自动执行递归校验。我们来看两个示例:

成都创新互联主要从事成都做网站、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务从江,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

示例1,struct递归校验

package main

import (
	"fmt"

	"github.com/GOgf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

type SearchReq struct {
	Key    string `v:"required"`
	Option SearchOption
}

type SearchOption struct {
	Page int `v:"min:1"`
	Size int `v:"max:100"`
}

func main() {
	var (
		ctx = gctx.New()
		req = SearchReq{
			Key: "GoFrame",
			Option: SearchOption{
				Page: 1,
				Size: 10000,
			},
		}
	)
	err := g.Validator().Data(req).Run(ctx)
	fmt.Println(err)
}

执行后,终端输出:

The Size value `10000` must be equal or lesser than 100

示例2,slice递归校验

package main

import (
	"fmt"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

func main() {
	type Student struct {
		Name string `v:"required#Student Name is required"`
		Age  int   
	}
	type Teacher struct {
		Name     string  
		Students []Student 
	}
	var (
		ctx     = gctx.New()
		teacher = Teacher{}
		data    = g.Map{
			"name":     "john",
			"students": `[{"age":2},{"name":"jack", "age":4}]`,
		}
	)
	err := g.Validator().Assoc(data).Data(teacher).Run(ctx)
	fmt.Println(err)
}

执行后,终端输出:

Student Name is required

示例3,map递归校验

package main

import (
	"fmt"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

func main() {
	type Student struct {
		Name string `v:"required#Student Name is required"`
		Age  int
	}
	type Teacher struct {
		Name     string
		Students map[string]Student
	}
	var (
		ctx     = gctx.New()
		teacher = Teacher{
			Name: "Smith",
			Students: map[string]Student{
				"john": {Name: "", Age: 18},
			},
		}
	)
	err := g.Validator().Data(teacher).Run(ctx)
	fmt.Println(err)
}

执行后,终端输出:

Student Name is required

网站题目:创新互联GoFrame教程:GoFrame数据校验-递归校验
文章地址:http://www.shufengxianlan.com/qtweb/news41/481541.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联