package main
import (
"context"
"fmt"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/util/gvalid"
"time"
)
type UserCreateReq struct {
g.Meta `v:"UserCreateReq"`
Name string
Pass string
}
func RuleUserCreateReq(ctx context.Context, in gvalid.RuleFuncInput) error {
var req *UserCreateReq
if err := in.Data.Scan(&req); err != nil {
return gerror.Wrap(err, `Scan data to UserCreateReq failed`)
}
// SELECT COUNT(*) FROM `user` WHERE `name` = xxx
count, err := g.Model("user").Ctx(ctx).Cache(gdb.CacheOption{
Duration: time.Hour,
Name: "",
Force: false,
}).Where("name", req.Name).Count()
if err != nil {
return err
}
if count > 0 {
return gerror.Newf(`The name "%s" is already token by others`, req.Name)
}
return nil
}
func main() {
var (
ctx = gctx.New()
user = &UserCreateReq{
Name: "john",
Pass: "123456",
}
)
err := g.Validator().RuleFunc("UserCreateReq", RuleUserCreateReq).Data(user).Run(ctx)
fmt.Println(err)
}
2 Comments
Leo
自定义规则无法使用自定义的错误提示。
SiteLogo string `json:"site_logo" dc:"网站LOGO" v:"required|url|in_mime:image/*#请上传网站LOGO|LOGO地址错误|LOGO必须是合法的图片"`
我自己定义了in_mime规则,验证了一下确实是可以验证的,但是提示是我在方法里面定义的英文提示,而不是结构体里面定义的“LOGO必须是合法的图片”,有什么办法吗?
叮当猫
当我们给定一个
struct
时,我们的规则只能对其中的键值或者属性进行校验,如果我们想要通过规则完整校验struct
这个对象时,居然无法注册校验组件的自定义校验规则。当然,我们的校验组件也支持直接校验当前的struct
对象。上面这句话至少看了10遍,我是真没看懂作者要表达什么意思。