63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package forms
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strings"
|
|
|
|
"github.com/asaskevich/govalidator"
|
|
)
|
|
|
|
// Form creates a custom form struct, embeds a url.Values object
|
|
type Form struct {
|
|
url.Values
|
|
Errors errors
|
|
}
|
|
|
|
// New initializes a form struct
|
|
func New(data url.Values) *Form {
|
|
return &Form{
|
|
data,
|
|
errors(map[string][]string{}),
|
|
}
|
|
}
|
|
|
|
// Required checks required fields
|
|
func (f *Form) Required(fields ...string) {
|
|
for _, field := range fields {
|
|
value := f.Get(field)
|
|
if strings.TrimSpace(value) == "" {
|
|
f.Errors.Add(field, "This field cannot be blank")
|
|
}
|
|
}
|
|
}
|
|
|
|
// Has checks if form field is in post and not emtpy
|
|
func (f *Form) Has(field string) bool {
|
|
x := f.Get(field)
|
|
return x != ""
|
|
}
|
|
|
|
// Valid returns true if there are no errors, otherwise false
|
|
func (f *Form) Valid() bool {
|
|
return len(f.Errors) == 0
|
|
}
|
|
|
|
// MinLength checks for string minimum length
|
|
func (f *Form) MinLength(field string, length int) bool {
|
|
value := f.Get(field)
|
|
if len(value) < length {
|
|
f.Errors.Add(field, fmt.Sprintf("This field must have at least %d letters", length))
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// IsEmail checks the email address
|
|
func (f *Form) IsEmail(field string) {
|
|
value := f.Get(field)
|
|
if !govalidator.IsEmail(value) {
|
|
f.Errors.Add(field, "Invalid email address")
|
|
}
|
|
}
|