validate
validate copied to clipboard
validate.Errors希望增加一个trans功能
在集成echo的发现的问题,最后单独实现了一个validate接口给echo,内部调用struct,最终给前端的时候,是error接口,强行转回validate.Errors类型,但是这个时候已经没办法重新格式化语种
目前的实现的方式是struct,指定,message方法,来统一调用一个语言转化方法,但是拿不到当前的context,判断游览器是什么语言,有点麻烦
😄 不是太明白,你可以贴下伪代码说明下现在的不足,和希望实现的效果。
echo 框架
type Validator struct {
}
func (Validator) Valdate(i interface{}) error {
v := validate.Struct(i)
if v.Validate() {
return nil
}
return v.Errors
}
func main() {
e := echo.New()
/* echo framework validator inteface
Validator interface {
Validate(i interface{}) error
}
*/
e.Validator = new(Validator)
e.GET("/", func(c echo.Context) error {
var form = new(struct {
Name string `validate:"required" json:"page" form:"name" query:"name"`
})
if err := c.Bind(form); err != nil {
panic(err)
}
if err:=c.Validate(form);err !=nil {
errs := err.(validate.Errors)
// this code is default translator
dump.DD(errs.All())
// need add func like this
// errs.Trans(map[string]inteface{}{
// "Name.required":"user name must required"
// })
// and we can use custom locale like this
// GetBrowserLocale() = zh-cn,GetBrowserLocalePack will retun map type
// errs.Trans(GetBrowserLocalePack(GetBrowserLocale()))
}
})
}
没想好你这种要怎么做 😄
没想好你这种要怎么做 😄
也没什么大事,我自己重写了context,在外层重新封装了一个返回*validate.Validation来解决这个问题,不过有没有什么办法能拿具体每个字段的错误类型,比如是required错误还是其他的错误类型,现在就是比如字段名字Name,里面一个数组字典,对应的错误信息,没有具体的错误类型
字段名 和 错误消息 比较重要。 验证错误的类型(验证器名称)好像没啥用啊
还是很有用的,有些特殊的验证器,在前端要特别提示用户,如果没有这个来判断,就没法知道,具体哪些才是重点了
😄 前端不是该根据 字段来提示吗
现在错误是这样存储的。 好像不太好放 验证器名称进去。。。
{
"username": ["error msg 0", "error msg 1"]
"age": ["error msg 2"]
}
如果改成这样子设计,到是可以加个字段存 验证器名称
[
{
"field": "username",
"error": "error msg 0"
},
{
"field": "username",
"error": "error msg 1"
},
{
"field": "age",
"error": "error msg 2"
}
]
现在错误是这样存储的。 好像不太好放 验证器名称进去。。。
{ "username": ["error msg 0", "error msg 1"] "age": ["error msg 2"] }
如果改成这样子设计,到是可以加个字段存 验证器名称
[ { "field": "username", "error": "error msg 0" }, { "field": "username", "error": "error msg 1" }, { "field": "age", "error": "error msg 2" } ]
这样不好啊,还是
{
"username": {required:"field must be required", email:"field must be email type"}
"age": [int:"field must int type"]
}
这样啊 也可以。 不过要改的话跟之前数据格式不兼容了,估计得改到 1.2 去
这样啊 也可以。 不过要改的话跟之前数据格式不兼容了,估计得改到 1.2 去
嗯,我发现你的包做的都不错啊,有没有微信可以交流
@dulumao 哈哈 感谢支持。都是一些简单的库,自己有用到,就自己写了。
有想法欢迎参与维护,非常支持。
可以交流啊,我微信 inhereat 搜一下就可以了。