From 7743eecfd4723b3e963de3e62da83c11c9d083e5 Mon Sep 17 00:00:00 2001 From: astaxie Date: Tue, 4 Nov 2014 16:19:46 +0800 Subject: [PATCH] support #761 type Test struct { Date time.Time `form:"Date, 2006-01-02"` Save bool `form:"Save"` } --- templatefunc.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/templatefunc.go b/templatefunc.go index 99f0a3e8..16067613 100644 --- a/templatefunc.go +++ b/templatefunc.go @@ -302,6 +302,14 @@ func ParseForm(form url.Values, obj interface{}) error { switch fieldT.Type.Kind() { case reflect.Bool: + if strings.ToLower(value) == "on" || strings.ToLower(value) == "1" || strings.ToLower(value) == "yes" { + fieldV.SetBool(true) + continue + } + if strings.ToLower(value) == "off" || strings.ToLower(value) == "0" || strings.ToLower(value) == "no" { + fieldV.SetBool(false) + continue + } b, err := strconv.ParseBool(value) if err != nil { return err @@ -329,6 +337,19 @@ func ParseForm(form url.Values, obj interface{}) error { fieldV.Set(reflect.ValueOf(value)) case reflect.String: fieldV.SetString(value) + case reflect.Struct: + switch fieldT.Type.String() { + case "time.Time": + format := time.RFC3339 + if len(tags) > 1 { + format = tags[1] + } + t, err := time.Parse(format, value) + if err != nil { + return err + } + fieldV.Set(reflect.ValueOf(t)) + } } } return nil