mirror of
https://gitee.com/johng/gf
synced 2026-06-07 02:12:11 +08:00
improve package gvalid
This commit is contained in:
@ -89,8 +89,10 @@ func CheckMap(params interface{}, rules interface{}, messages ...CustomMsg) *Err
|
||||
}
|
||||
if e := doCheck(key, value, rule, customMsgs[key], data); e != nil {
|
||||
_, item := e.FirstItem()
|
||||
// ===========================================================
|
||||
// If value is nil or empty string and has no required* rules,
|
||||
// clear the error message.
|
||||
// ===========================================================
|
||||
if gconv.String(value) == "" {
|
||||
required := false
|
||||
// rule => error
|
||||
|
||||
@ -151,8 +151,10 @@ func CheckStruct(object interface{}, rules interface{}, messages ...CustomMsg) *
|
||||
}
|
||||
if e := doCheck(key, value, rule, customMessage[key], params); e != nil {
|
||||
_, item := e.FirstItem()
|
||||
// ===========================================================
|
||||
// If value is nil or empty string and has no required* rules,
|
||||
// clear the error message.
|
||||
// ===========================================================
|
||||
if value == nil || gconv.String(value) == "" {
|
||||
required := false
|
||||
// rule => error
|
||||
|
||||
@ -25,7 +25,7 @@ var (
|
||||
// It returns error if there's already the same rule registered previously.
|
||||
func RegisterRule(rule string, f RuleFunc) error {
|
||||
if _, ok := allSupportedRules[rule]; ok {
|
||||
return fmt.Errorf(`validation rule "%s" is already registed`, rule)
|
||||
return fmt.Errorf(`validation rule "%s" is already registered`, rule)
|
||||
}
|
||||
allSupportedRules[rule] = struct{}{}
|
||||
customRuleFuncMap[rule] = f
|
||||
|
||||
@ -250,3 +250,32 @@ func Test_CheckStruct_With_Inherit(t *testing.T) {
|
||||
t.Assert(err.Maps()["password2"], g.Map{"same": "您两次输入的密码不一致"})
|
||||
})
|
||||
}
|
||||
|
||||
func Test_CheckStruct_Optional(t *testing.T) {
|
||||
gtest.C(t, func(t *gtest.T) {
|
||||
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"`
|
||||
}
|
||||
obj := &Params{
|
||||
Page: 1,
|
||||
Size: 1,
|
||||
}
|
||||
err := gvalid.CheckStruct(obj, nil)
|
||||
t.Assert(err, nil)
|
||||
})
|
||||
gtest.C(t, func(t *gtest.T) {
|
||||
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"`
|
||||
}
|
||||
obj := &Params{
|
||||
Page: 1,
|
||||
Size: 1,
|
||||
}
|
||||
err := gvalid.CheckStruct(obj, nil)
|
||||
t.Assert(err.String(), "project id must between 1, 10000")
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user