validate icon indicating copy to clipboard operation
validate copied to clipboard

validate.Errors希望增加一个trans功能

Open dulumao opened this issue 5 years ago • 13 comments

在集成echo的发现的问题,最后单独实现了一个validate接口给echo,内部调用struct,最终给前端的时候,是error接口,强行转回validate.Errors类型,但是这个时候已经没办法重新格式化语种

dulumao avatar May 13 '19 07:05 dulumao

目前的实现的方式是struct,指定,message方法,来统一调用一个语言转化方法,但是拿不到当前的context,判断游览器是什么语言,有点麻烦

dulumao avatar May 13 '19 07:05 dulumao

😄 不是太明白,你可以贴下伪代码说明下现在的不足,和希望实现的效果。

inhere avatar May 13 '19 08:05 inhere

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()))
		}
	})
}

dulumao avatar May 13 '19 09:05 dulumao

没想好你这种要怎么做 😄

inhere avatar May 20 '19 03:05 inhere

没想好你这种要怎么做 😄

也没什么大事,我自己重写了context,在外层重新封装了一个返回*validate.Validation来解决这个问题,不过有没有什么办法能拿具体每个字段的错误类型,比如是required错误还是其他的错误类型,现在就是比如字段名字Name,里面一个数组字典,对应的错误信息,没有具体的错误类型

dulumao avatar May 20 '19 03:05 dulumao

字段名 和 错误消息 比较重要。 验证错误的类型(验证器名称)好像没啥用啊

inhere avatar May 20 '19 03:05 inhere

还是很有用的,有些特殊的验证器,在前端要特别提示用户,如果没有这个来判断,就没法知道,具体哪些才是重点了

dulumao avatar May 21 '19 01:05 dulumao

😄 前端不是该根据 字段来提示吗

inhere avatar May 21 '19 03:05 inhere

现在错误是这样存储的。 好像不太好放 验证器名称进去。。。

{	
	"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"
	}
]

inhere avatar Jul 24 '19 10:07 inhere

现在错误是这样存储的。 好像不太好放 验证器名称进去。。。

{	
	"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"]
}

dulumao avatar Jul 29 '19 08:07 dulumao

这样啊 也可以。 不过要改的话跟之前数据格式不兼容了,估计得改到 1.2 去

inhere avatar Jul 29 '19 09:07 inhere

这样啊 也可以。 不过要改的话跟之前数据格式不兼容了,估计得改到 1.2 去

嗯,我发现你的包做的都不错啊,有没有微信可以交流

dulumao avatar Jul 29 '19 12:07 dulumao

@dulumao 哈哈 感谢支持。都是一些简单的库,自己有用到,就自己写了。

有想法欢迎参与维护,非常支持。

可以交流啊,我微信 inhereat 搜一下就可以了。

inhere avatar Jul 29 '19 12:07 inhere