日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame自定義規(guī)則-完整數(shù)據(jù)校驗(yàn)

基本介紹

大家也許已經(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