新聞中心
基本介紹
大家也許已經(jīng)注意到,當(dāng)我們給定一個(gè)?struct?時(shí),我們的規(guī)則只能對(duì)其中的鍵值或者屬性進(jìn)行校驗(yàn),如果我們想要通過(guò)規(guī)則完整校驗(yàn)?struct?這個(gè)對(duì)象時(shí),居然無(wú)法注冊(cè)校驗(yàn)組件的自定義校驗(yàn)規(guī)則。當(dāng)然,我們的校驗(yàn)組件也支持直接校驗(yàn)當(dāng)前的?struct?對(duì)象。我們來(lái)看一個(gè)例子,在這個(gè)例子中,我們需要對(duì)創(chuàng)建的用戶請(qǐng)求進(jìn)行完整的自定義校驗(yàn),并注冊(cè)一個(gè)?UserCreateReq?的校驗(yàn)規(guī)則來(lái)實(shí)現(xiàn)。

創(chuàng)新互聯(lián)建站是專業(yè)的修武網(wǎng)站建設(shè)公司,修武接單;提供網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行修武網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
使用示例
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)
}
可以看到,我們通過(guò)給結(jié)構(gòu)體一個(gè)?g.Meta?嵌入的元數(shù)據(jù),并綁定?UserCreateReq?的自定義規(guī)則,?g.Meta?作為結(jié)構(gòu)體的一部分,當(dāng)我們通過(guò)?CheckStruct?校驗(yàn)該結(jié)構(gòu)體對(duì)象時(shí),便可以通過(guò)?UserCreateReq?來(lái)實(shí)現(xiàn)校驗(yàn)。
上面的例子,我們執(zhí)行后,終端輸出:
The name "john" is already token
文章名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame自定義規(guī)則-完整數(shù)據(jù)校驗(yàn)
鏈接分享:http://www.dlmjj.cn/article/dpdcche.html


咨詢
建站咨詢
