beego validate验证包的修改原有验证提示信息与使用自定义函数验证的方法 - Go语言中文社区

beego validate验证包的修改原有验证提示信息与使用自定义函数验证的方法


 1、增加验证包 validate

我首先定义了一个默认的验证包,在控制器中会调用验证包中的方法进行验证表单提交时候传入的字段

2、在控制器中书写验证方法

// 发表文章的内容提交
// @router /release [post]
func (c *ArticleController) Post() {
	u := &validate.ValidateArticle{
		ArticleName:    c.GetString("article_name"),
		ArticleContent: c.GetString("article_content"),
	}
//作为表单验证
	err := u.ValidArticle()
	if err != nil {
		c.Abort500(err.Error(), "")
		return
	}
	//进行提交表单
	article := models.Article{
		ArticleName:    c.GetString("article_name"),
		ArticleContent: c.GetString("article_content"),
		CreateTime:     time.Now().Unix(),
		UpdateTime:     time.Now().Unix(),
		Status:         int8(2),
	}
	err = article.SaveArticle()
	id := article.Id
	if err != nil {
		c.Abort500(err.Error(), "")
	}
	idStr := strconv.FormatInt(id, 10)
	c.Abort200("添加成功", "/article/"+idStr)
}

3、在验证器中进行字段验证 

package validate

import (
	"errors"
	"github.com/astaxie/beego/validation"
	"imooc/beego/myproject/models"
	"reflect"
)
//tags中 alias 表示验证不通过时候的提示名称,valid表示验证的格式 分号分割不同的验证内容
type ValidateArticle struct {
	ArticleName    string `alias:"文章名称"  valid:"Required;MaxSize(40);Mobile;Unique"`
	ArticleContent string `alias:"文章内容"  valid:"Required"`
}

func (a *ValidateArticle) ValidArticle() (err error) {
	valid := validation.Validation{}
	b,_ := valid.Valid(a)
	if !b {
        //表示获取验证的结构体
		st := reflect.TypeOf(ValidateArticle{})
		for _, err := range valid.Errors {
            //获取验证的字段名和提示信息的别名
			filed, _ := st.FieldByName(err.Field)
			var alias = filed.Tag.Get("alias")
            //返回验证的错误信息
			return errors.New(alias+err.Message)
		}
	}
	return nil
}

这个是验证的公共方法 

package validate

import (
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/validation"
)

func InitValidate()  {
	SetDefaultMessage()
}

 

下载第一步首先修改默认的验证提示信息

原有的提示信息是中文不太好展示,如果每一个验证信息都全部重新,重复代码太多不够优美,所有才有修改默认信息

在刚才的自己创建的的验证包 validate 中,重新定义一次所有的提示信息:

var MessageTmpls = map[string]string{
	"Required":     "不能为空",
	"Min":          "最小为 %d",
	"Max":          "最大为 %d",
	"Range":        "范围在 %d 至 %d",
	"MinSize":      "最小长度为 %d",
	"MaxSize":      "最大长度为 %d",
	"Length":       "长度必须是 %d",
	"Alpha":        "必须是有效的字母字符",
	"Numeric":      "必须是有效的数字字符",
	"AlphaNumeric": "必须是有效的字母或数字字符",
	"Match":        "必须匹配格式 %s",
	"NoMatch":      "必须不匹配格式 %s",
	"AlphaDash":    "必须是有效的字母或数字或破折号(-_)字符",
	"Email":        "必须是有效的邮件地址",
	"IP":           "必须是有效的IP地址",
	"Base64":       "必须是有效的base64字符",
	"Mobile":       "必须是有效手机号码",
	"Tel":          "必须是有效电话号码",
	"Phone":        "必须是有效的电话号码或者手机号码",
	"ZipCode":      "必须是有效的邮政编码",
}

再写入刚才validate报中 initValidate方法调用的函数 

SetDefaultMessage()

 

//默认设置通用的错误验证和提示项
func SetDefaultMessage() {
	if len(MessageTmpls) == 0{
		return
	}
	//将默认的提示信息转为自定义
	for k,_:= range MessageTmpls{
		validation.MessageTmpls[k] = MessageTmpls[k]
	}

	//增加默认的自定义验证方法
	_ = validation.AddCustomFunc("Unique", Unique)
}

2、自定义的验证方法的话 在调用的时候需要设置到想对应的方法名与函数

var Unique validation.CustomFunc = func(v *validation.Validation, obj interface{}, key string) {
	logs.Debug("传入的字段名称:",key)
	logs.Debug("传入的字段内容:",obj)
	logs.Debug("传入的验证:",v)
	logs.Debug("验证当前字段在表中不重复")
}

4、最主要的在main表中引入刚才设置的验证类

package main

import (
	"github.com/astaxie/beego"
	_ "imooc/beego/myproject/routers"
	"imooc/beego/myproject/validate"
	"strings"
)

func main() {

	validate.InitValidate() //验证信息的初始化定义
	
	beego.Run()
}

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/fengke549015/article/details/99646426
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-27 23:03:40
  • 阅读 ( 3020 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢