53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
|
package validate
|
||
|
|
||
|
import (
|
||
|
"yitao/ecode"
|
||
|
|
||
|
"github.com/go-playground/locales/zh"
|
||
|
ut "github.com/go-playground/universal-translator"
|
||
|
"github.com/go-playground/validator/v10"
|
||
|
"github.com/kataras/iris/v12"
|
||
|
)
|
||
|
|
||
|
var validate *validator.Validate
|
||
|
var trans ut.Translator
|
||
|
|
||
|
func InitValidator() {
|
||
|
validate = validator.New()
|
||
|
eng := zh.New()
|
||
|
uni := ut.New(eng, eng)
|
||
|
trans, _ = uni.GetTranslator("zh")
|
||
|
|
||
|
addTranslation("min", "{0} 长度必须至少为 {1} 个字符")
|
||
|
addTranslation("max", "{0} 长度不能超过 {1} 个字符")
|
||
|
addTranslation("len", "{0} 长度应该为 {1} 个字符")
|
||
|
}
|
||
|
|
||
|
func addTranslation(tag string, tr string) {
|
||
|
validate.RegisterTranslation(tag, trans, func(ut ut.Translator) error {
|
||
|
return ut.Add(tag, tr, true)
|
||
|
}, func(ut ut.Translator, fe validator.FieldError) string {
|
||
|
t, _ := ut.T(tag, fe.Field(), fe.Param())
|
||
|
return t
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func GetValidator() *validator.Validate {
|
||
|
return validate
|
||
|
}
|
||
|
|
||
|
func ReadJSON(ctx iris.Context, result interface{}) *ecode.Ecode {
|
||
|
ctx.ReadBody(result)
|
||
|
err := GetValidator().Struct(result)
|
||
|
if err != nil {
|
||
|
validateErr := err.(validator.ValidationErrors)
|
||
|
firstValue := ""
|
||
|
for _, v := range validateErr.Translate(trans) {
|
||
|
firstValue = v
|
||
|
break // 退出循环,确保只获取第一个元素
|
||
|
}
|
||
|
return ecode.Set(255, firstValue)
|
||
|
}
|
||
|
return ecode.OK()
|
||
|
}
|