新聞中心
這里有您想知道的互聯(lián)網營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame自定義規(guī)則-完整數據校驗
基本介紹
大家也許已經注意到,當我們給定一個?struct?時,我們的規(guī)則只能對其中的鍵值或者屬性進行校驗,如果我們想要通過規(guī)則完整校驗?struct?這個對象時,居然無法注冊校驗組件的自定義校驗規(guī)則。當然,我們的校驗組件也支持直接校驗當前的?struct?對象。我們來看一個例子,在這個例子中,我們需要對創(chuàng)建的用戶請求進行完整的自定義校驗,并注冊一個?UserCreateReq?的校驗規(guī)則來實現。

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


咨詢
建站咨詢
