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 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 方法
Click to show internal directories.
Click to hide internal directories.