diff --git a/validation/util_test.go b/validation/util_test.go index 553301e2..05f4ec3e 100644 --- a/validation/util_test.go +++ b/validation/util_test.go @@ -15,6 +15,7 @@ package validation import ( + "log" "reflect" "testing" ) @@ -80,6 +81,28 @@ func TestGetValidFuncs(t *testing.T) { } } +type User struct { + Name string `valid:"Required;MaxSize(5)" ` + Sex string `valid:"Required;" label:"sex_label"` + Age int `valid:"Required;Range(1, 140);" label:"age_label"` +} + +func TestValidation(t *testing.T) { + u := User{"man1238888456", "", 1140} + valid := Validation{} + b, err := valid.Valid(&u) + if err != nil { + // handle error + } + if !b { + // validation does not pass + // blabla... + for _, err := range valid.Errors { + log.Println(err.Key, err.Message) + } + } +} + func TestCall(t *testing.T) { u := user{Name: "test", Age: 180} tf := reflect.TypeOf(u) diff --git a/validation/validation.go b/validation/validation.go index a3e4b571..190e0f0e 100644 --- a/validation/validation.go +++ b/validation/validation.go @@ -273,10 +273,13 @@ func (v *Validation) apply(chk Validator, obj interface{}) *Result { Field = parts[0] Name = parts[1] Label = parts[2] + if len(Label) == 0 { + Label = Field + } } err := &Error{ - Message: Label + chk.DefaultMessage(), + Message: Label + " " + chk.DefaultMessage(), Key: key, Name: Name, Field: Field, @@ -293,19 +296,25 @@ func (v *Validation) apply(chk Validator, obj interface{}) *Result { } } +// key must like aa.bb.cc or aa.bb. // AddError adds independent error message for the provided key func (v *Validation) AddError(key, message string) { Name := key Field := "" + Label := "" parts := strings.Split(key, ".") if len(parts) == 3 { Field = parts[0] Name = parts[1] + Label = parts[2] + if len(Label) == 0 { + Label = Field + } } err := &Error{ - Message: message, + Message: Label + " " + message, Key: key, Name: Name, Field: Field, @@ -381,7 +390,6 @@ func (v *Validation) Valid(obj interface{}) (b bool, err error) { } } - chk := Required{""}.IsSatisfied(currentField) if !hasRequired && v.RequiredFirst && !chk { if _, ok := CanSkipFuncs[vf.Name]; ok {