validation4gin

package module
v0.0.0-...-7e434bf Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 31, 2024 License: GPL-3.0 Imports: 5 Imported by: 0

README

validation4gin

一、说明

type ValidRuleRequest struct {
    ID uint `form:"id" json:"id" binding:"required,min=10,max=1000"`
}

func ValidRule(ctx *gin.Context) {
    var req ValidRuleRequest
	
    // 这个err无法个性化自定义 需要转换翻译
    err := ctx.ShouldBindQuery(&req)
}

上述代码为基于gin框架的典型的参数绑定,并且具有表单检查的功能

  • 当参数绑定失败或表单检查不通过时返回的error信息有多种类型:绑定失败相关、表单检查相关 等
  • 直接err.Error()转换的字符串对非编程人员而言识读性差

本库尝试按一定规则来解析这个err并定制化返回文案

因 gin 框架底层默认使用的 go-playground/validator 这个表单检查库 实质上本库是在尝试翻译 go-playground/validator 的返回值而不是使用官方库既重又不够个性化的i18n翻译。

二、用法

样例

type ValidRuleRequest struct {
    ID uint `form:"id" json:"id" binding:"required,min=1,max=1000"`
    Name string `form:"name" json:"name" binding:"required,max=255"`
}

var message = validation4gin.

func ValidRule(ctx *gin.Context) {
    var req ValidRuleRequest
	
    err := ctx.ShouldBindQuery(&req)
    
    // 定义Rule规则下的错误文案
    message := validation4gin.Message{
        "ID.*"         :  ":ID错误",
        "ID.kind"      :  ":ID类型错误",
        "ID.min"       :  ":ID不得小于10",
        "ID.max"       :  ":ID不得大于100",
        "Name.required":  "用户:Name必填",
        "Name.max"     :  "用户:Name长度最大支持255个字符",
        "kind"         :  "用户:Name参数类型错误",
    }
    // 定义表单相关字段对应值
    // 如果绑定的到struct则是结构体的字段名FieldName(而不是传参form表单字段名)
    // 如果绑定的到map,则是map的key
    fieldMap := validation4gin.FieldMap{
        "ID":   "编号",
        "Name": "名称",
    }
    if err != nil {
        msg := validation4gin.Translate(err, message, fieldMap)
		fmt.Println(msg.First()) // 将会打印出翻译转换后的文案
    }
}

validation4gin.Message 类型

  • 键 构成规则是 字段名.表单检查规则
    • FieldName.-rule- 表示表单检查这个规则不通过时的文案(优先级1);
    • FieldName.* 表示字段下通配,该字段下未定义的规则被触发时通配使用(优先级2);
    • -rule- 表示全字段通配,某个字段未定义任何rule规则下则是全字段通配规则文案(优先级3);
    • kind kind是一个特定的规则(即 validation4gin.KindKey 常量),表示参数绑定时传参类型与绑定的结构不符或越界时使用该文案(优先级3);
    • * 通配所有未指定规则(优先级4);
  • 值 为自定义文案,文案中可使用 :开头的字段名作为变量,即validation4gin.FieldMap的键名并最终把变量替换掉;

注意:因参数绑定error无法追溯到是哪个字段绑定失败,FieldName.kind可能无法生效,建议设定kind规则;原因见此:https://github.com/gin-gonic/gin/issues/2334

validation4gin.FieldMap 类型

  • 键 为字段名,结构体的字段或map的键名
  • 值 为这个字段映射的自定义文案名

Documentation

Index

Constants

View Source
const (
	KindKey       = "kind"
	AttributeFlag = ":"
)

定义常量

Variables

View Source
var (
	// ValidationRuleTypeErrorMessage go-playground/validator表单检查类型错误
	//  出现此种类型错误表明代码写法有严重问题,需要手动修正
	//  gin框架下几乎不会出现
	ValidationRuleTypeErrorMessage = "参数类型错误请检查代码:%s"
	// ValidationDefaultMessage 未定义rule规则下文案时默认文案
	//  当未定义rule规则对应的消息体时的默认消息体
	ValidationDefaultMessage = "字段%s规则%s不通过"
	// ValidationNoCoverMessage 未覆盖到的错误类型默认文案<自定义则通过 * 通配>
	ValidationNoCoverMessage = "参数错误"
)

定义默认message

Functions

This section is empty.

Types

type FieldMap

type FieldMap map[string]string

FieldMap 自定义检查字段filed与自定义名称映射关系

type Message

type Message map[string]string

Message 自定义validate失败时错误消息

type MessageBag

type MessageBag []string

MessageBag 处理结果集响应值结构

func Translate

func Translate(err error, message Message, fieldMap FieldMap) MessageBag

Translate

  • message的键 由 结构体字段名、点字符、验证器验证规则、星通配符构成
  • message的值 给出响应文案内容
  • message自定义消息map键构成形式的优先级定义如下 (Message Map key define use for priority)
  • Field.rule
  • Field.*
  • rule

func (MessageBag) All

func (m MessageBag) All(sep string) string

All 获取所有文案

  • sep 多条文案的分隔符,没有则返回空字符串 不要依赖返回空字符串判断 MessageBag 为空,而应该使用 IsEmpty 方法

func (MessageBag) First

func (m MessageBag) First() string

First 获取第一条文案,没有则返回空字符串

不要依赖返回空字符串判断 MessageBag 为空,而应该使用 IsEmpty 方法

func (MessageBag) IsEmpty

func (m MessageBag) IsEmpty() bool

IsEmpty 检查消息bag是否为空

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL