validator icon indicating copy to clipboard operation
validator copied to clipboard

add reflect struct field on validate error

Open ivybridge-3c33 opened this issue 2 years ago • 2 comments

add reflect on fields

use case: I've added reflect.StructField for using for getting a tag for using my own custom validate message and getting the field name from the language example use from my own project

	type test struct {
		Title string `validate:"required" json:"title" lang_key:"title"` // ex language of title = "banana"
	}
	s := test{}
	err := validate.Struct(s)
	if validate, ok := err.(*validator.InvalidValidationError); ok {
		panic(validate)
	}

	errorsFields := make(map[string][]string, 0)
	for _, validate := range err.(validator.ValidationErrors) {
		fe := validate.ReflectStructField()
		fieldName := strings.Replace(fe.Tag.Get("json"), ",omitempty", "", 0)
		if _, ok := errorsFields[fieldName]; !ok {
			errorsFields[fieldName] = make([]string, 0)
		}
		msg := ""
		switch errTagName := validate.Tag(); errTagName {
		case "regexp":
			// format :"%s invalid format blablabla"
			msg = i18n.ParseT(ct, "validator.regexp", i18n.ParseT(ct, "test."+fe.Tag.Get("lang_key"))) // banana invalid format blabla
		}
		errorsFields[fieldName] = append(errorsFields[fieldName], msg)
	}

@go-playground/validator-maintainers

ivybridge-3c33 avatar Jul 28 '22 10:07 ivybridge-3c33

Coverage Status

Coverage increased (+0.02%) to 74.202% when pulling 32d22f5237fc4e5326685b0b00e18d51ea211e46 on fullmoon-tech:reflex-struct-field into c7e0172e0fd176bdc521afb5186818a7db6b77ac on go-playground:master.

coveralls avatar Jul 28 '22 10:07 coveralls

@ivybridge-3c33 I like the idea of grabbing struct field, I wonder if it might be confusing though for when the validation is not a struct field.

I wonder if there would be a way for it to work with struct fields and regular ones also?

deankarn avatar Mar 20 '23 00:03 deankarn