github.com/goravel/framework@v1.13.9/validation/options.go (about) 1 package validation 2 3 import ( 4 "strings" 5 6 "github.com/gookit/validate" 7 8 "github.com/goravel/framework/contracts/http" 9 httpvalidate "github.com/goravel/framework/contracts/validation" 10 ) 11 12 func Rules(rules map[string]string) httpvalidate.Option { 13 return func(options map[string]any) { 14 if len(rules) > 0 { 15 options["rules"] = rules 16 } 17 } 18 } 19 20 func CustomRules(rules []httpvalidate.Rule) httpvalidate.Option { 21 return func(options map[string]any) { 22 if len(rules) > 0 { 23 options["customRules"] = rules 24 } 25 } 26 } 27 28 func Messages(messages map[string]string) httpvalidate.Option { 29 return func(options map[string]any) { 30 if len(messages) > 0 { 31 options["messages"] = messages 32 } 33 } 34 } 35 36 func Attributes(attributes map[string]string) httpvalidate.Option { 37 return func(options map[string]any) { 38 if len(attributes) > 0 { 39 options["attributes"] = attributes 40 } 41 } 42 } 43 44 func PrepareForValidation(prepare func(data httpvalidate.Data) error) httpvalidate.Option { 45 return func(options map[string]any) { 46 options["prepareForValidation"] = func(ctx http.Context, data httpvalidate.Data) error { 47 return prepare(data) 48 } 49 } 50 } 51 52 func GenerateOptions(options []httpvalidate.Option) map[string]any { 53 realOptions := make(map[string]any) 54 for _, option := range options { 55 option(realOptions) 56 } 57 58 return realOptions 59 } 60 61 func AppendOptions(validator *validate.Validation, options map[string]any) { 62 if options["rules"] != nil { 63 rules := options["rules"].(map[string]string) 64 for key, value := range rules { 65 validator.StringRule(key, value) 66 } 67 } 68 69 if options["messages"] != nil { 70 messages := options["messages"].(map[string]string) 71 for key, value := range messages { 72 messages[key] = strings.ReplaceAll(value, ":attribute", "{field}") 73 } 74 validator.AddMessages(messages) 75 } 76 77 if options["attributes"] != nil && len(options["attributes"].(map[string]string)) > 0 { 78 validator.AddTranslates(options["attributes"].(map[string]string)) 79 } 80 81 if options["customRules"] != nil { 82 customRules := options["customRules"].([]httpvalidate.Rule) 83 for _, customRule := range customRules { 84 customRule := customRule 85 validator.AddMessages(map[string]string{ 86 customRule.Signature(): strings.ReplaceAll(customRule.Message(), ":attribute", "{field}"), 87 }) 88 validator.AddValidator(customRule.Signature(), func(val any, options ...any) bool { 89 return customRule.Passes(validator, val, options...) 90 }) 91 } 92 } 93 94 validator.Trans().FieldMap() 95 }