YiTao/validate/validate.go

76 lines
1.8 KiB
Go
Raw 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
2024-11-13 16:30:51 +08:00
type ParamInterface interface {
Default()
}
2024-11-09 14:59:27 +08:00
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} 个字符")
2024-11-13 16:30:51 +08:00
addTranslation("required", "{0} 不能为空")
2024-11-09 14:59:27 +08:00
}
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
}
2024-11-13 16:30:51 +08:00
func ReadJSON(ctx iris.Context, result ParamInterface) *ecode.Ecode {
2024-11-09 14:59:27 +08:00
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)
}
2024-11-13 16:30:51 +08:00
// 填充默认值
result.Default()
return ecode.OK()
}
func ReadQuery(ctx iris.Context, result ParamInterface) *ecode.Ecode {
ctx.ReadQuery(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)
}
result.Default()
2024-11-09 14:59:27 +08:00
return ecode.OK()
}