改进gvalid输入参数类型map[string]string -> map[string]interface{}

This commit is contained in:
John
2018-04-10 16:41:56 +08:00
parent 58095ac006
commit 3c43f98a78
2 changed files with 16 additions and 17 deletions

View File

@ -12,14 +12,14 @@ import (
"strings"
"regexp"
"strconv"
"github.com/fatih/structs"
"gitee.com/johng/gf/g/os/gtime"
"gitee.com/johng/gf/g/net/gipv4"
"gitee.com/johng/gf/g/net/gipv6"
"gitee.com/johng/gf/g/util/gregx"
"gitee.com/johng/gf/g/util/gconv"
"gitee.com/johng/gf/g/encoding/gjson"
"gitee.com/johng/gf/g/container/gmap"
"github.com/fatih/structs"
"gitee.com/johng/gf/g/util/gconv"
)
/*
@ -377,7 +377,7 @@ func checkSize(value, rulekey, ruleval string, cmsgs map[string]string) string {
}
// 检测键值对参数Map注意返回参数是一个2维的关联数组第一维键名为参数键名第二维为带有错误的校验规则名称值为错误信息
func CheckMap(params map[string]string, rules map[string]string, msgs...map[string]interface{}) map[string]map[string]string {
func CheckMap(params map[string]interface{}, rules map[string]string, msgs...map[string]interface{}) map[string]map[string]string {
// 自定义消息,非必须参数,因此这里需要做判断
cmsgs := make(map[string]interface{})
if len(msgs) > 0 {
@ -405,22 +405,21 @@ func CheckMap(params map[string]string, rules map[string]string, msgs...map[stri
// 校验struct对象属性object参数也可以是一个指向对象的指针返回值同CheckMap方法
func CheckObject(object interface{}, rules map[string]string, msgs...map[string]interface{}) map[string]map[string]string {
params := make(map[string]string)
for k, v := range structs.Map(object) {
params[k] = gconv.String(v)
}
return CheckMap(params, rules, msgs...)
return CheckMap(structs.Map(object), rules, msgs...)
}
// 检测单条数据的规则其中params参数为非必须参数可以传递所有的校验参数进来进行多参数对比(部分校验规则需要)
// msgs为自定义错误信息由于同一条数据的校验规则可能存在多条为方便调用参数类型支持string/map[string]string允许传递多个自定义的错误信息如果类型为string那么中间使用"|"符号分隔多个自定义错误
// values参数为表单联合校验参数对于需要联合校验的规则有效required-*、same、different
func Check(value, rules string, msgs interface{}, params...map[string]string) map[string]string {
value = strings.TrimSpace(value)
func Check(val interface{}, rules string, msgs interface{}, params...map[string]interface{}) map[string]string {
// 内部会将参数全部转换为字符串类型进行校验
value := strings.TrimSpace(gconv.String(val))
kvmap := make(map[string]string)
errmsgs := make(map[string]string)
if len(params) > 0 {
kvmap = params[0]
for k, v := range params[0] {
kvmap[k] = gconv.String(v)
}
}
// 自定义错误消息处理
list := make([]string, 0)

View File

@ -25,7 +25,7 @@ func Test_Regex(t *testing.T) {
}
func Test_CheckMap(t *testing.T) {
kvmap := map[string]string {
kvmap := map[string]interface{} {
"id" : "0",
"name" : "john",
}
@ -44,7 +44,7 @@ func Test_CheckMap(t *testing.T) {
t.Error("CheckMap校验失败")
}
kvmap = map[string]string {
kvmap = map[string]interface{} {
"id" : "1",
"name" : "john",
}
@ -93,10 +93,10 @@ func Test_Required(t *testing.T) {
if m := gvalid.Check("", "required", nil); m == nil {
t.Error(m)
}
if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]string{"id" : "1", "age" : "19"}); m == nil {
if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]interface{}{"id" : 1, "age" : 19}); m == nil {
t.Error("Required校验失败")
}
if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]string{"id" : "2", "age" : "19"}); m != nil {
if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]interface{}{"id" : 2, "age" : 19}); m != nil {
t.Error("Required校验失败")
}
}
@ -151,10 +151,10 @@ func Test_MaxLength(t *testing.T) {
func Test_Between(t *testing.T) {
rule := "between:6.01, 10.01"
if m := gvalid.Check("10", rule, nil); m != nil {
if m := gvalid.Check(10, rule, nil); m != nil {
t.Error(m)
}
if m := gvalid.Check("10.02", rule, nil); m == nil {
if m := gvalid.Check(10.02, rule, nil); m == nil {
t.Error("大小范围校验失败")
}
}