YiTao/validate/validate.go

53 lines
1.3 KiB
Go
Raw Permalink Normal View History

2024-11-09 14:59:27 +08:00
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()
}