GoFrame 數據校驗-可選校驗

2022-03-30 14:00 更新

可選校驗規(guī)則

當給定的數據校驗規(guī)則中不包含?required*?規(guī)則時,表示該規(guī)則不是一個必須規(guī)則。如果當給定的值為?nil?或者空字符串時,將會忽略其校驗。

示例1,空字符串

package main

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

func main() {
	type Params struct {
		Page      int    `v:"required|min:1         # page is required"`
		Size      int    `v:"required|between:1,100 # size is required"`
		ProjectId string `v:"between:1,10000        # project id must between {min}, {max}"`
	}
	var (
		ctx = gctx.New()
		obj = &Params{
			Page: 1,
			Size: 10,
		}
	)  

	err := g.Validator().Data(obj).Run(ctx)  
	fmt.Println(err)

	// Output:
	// <nil>
}

示例2,空指針屬性

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/container/gvar"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

func main() {
	type Params struct {
		Page      int       `v:"required|min:1         # page is required"`
		Size      int       `v:"required|between:1,100 # size is required"`
		ProjectId *gvar.Var `v:"between:1,10000        # project id must between {min}, {max}"`
	}
	var (
		ctx = gctx.New()
		obj = &Params{
			Page: 1,
			Size: 10,
		}
	)  
	err := g.Validator().Data(obj).Run(ctx)  
	fmt.Println(err)

	// Output:
	// <nil>
}

示例3,空整型屬性

需要注意的是,如果鍵值為?0?或者?false?,參數值將仍然會被校驗。

package main

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

func main() {
	type Params struct {
		Page      int `v:"required|min:1         # page is required"`
		Size      int `v:"required|between:1,100 # size is required"`
		ProjectId int `v:"between:1,10000        # project id must between {min}, {max}"`
	}
	var (
		ctx = gctx.New()
		obj = &Params{
			Page: 1,
			Size: 10,
		}
	)
	err := g.Validator().Data(obj).Run(ctx)  
	fmt.Println(err)

	// Output:
	// <nil>
}

執(zhí)行后,終端輸出:

project id must between 1, 10000

示例4,通過map傳參

package main

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

func main() {
	var (
		ctx    = gctx.New()
		params = map[string]interface{}{
			"passport":  "",
			"password":  "123456",
			"password2": "1234567",
		}
		rules = []string{
			"passport@length:6,16",
			"password@required|length:6,16|same:password2",
			"password2@required|length:6,16",
		}
	)
	err := g.Validator().Rules(rules).Data(params).Run(ctx)
	if err != nil {
		g.Dump(err.Maps())
	}
}

需要注意,其中的?passport?鍵名并沒有?required?規(guī)則,因此即便給定的?passport?參數為空字符串,不滿足規(guī)則時,也并沒有報錯,因為校驗組件將其看做可選校驗規(guī)則。

執(zhí)行后,終端輸出:

{
    "password": {
        "same": "The password value `123456` must be the same as field password2",
    },
}


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號