-
Notifications
You must be signed in to change notification settings - Fork 0
/
forms.go
40 lines (35 loc) · 975 Bytes
/
forms.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package views
import (
"net/url"
"fmt"
"strconv"
)
var _ = fmt.Println
type Form struct {
Fields map[string]Field // - name required
SuccessUrl string
Validate func(values url.Values) []string
}
type Field struct {
Required bool
Type string
}
func (form Form) HandleValidate(values url.Values) []string {
var errors []string
for name, field := range form.Fields {
switch field.Type { // specific validation
case "number":
_, err := strconv.Atoi(values[name][0])
if err != nil {
errors = append(errors, fmt.Sprintf("Field \"%v\" must be a number.", name))
}
}
if (len(values[name]) == 0 || values[name][0] == "") && field.Required {
errors = append(errors, fmt.Sprintf("Field \"%v\" is required.", name))
}
}
if form.Validate != nil {
return form.Validate(values)
}
return errors
}