7743eecf by astaxie

support #761

type Test struct {
    Date    time.Time    `form:"Date, 2006-01-02"`
    Save    bool            `form:"Save"`
}
1 parent c4d8e4a2
...@@ -302,6 +302,14 @@ func ParseForm(form url.Values, obj interface{}) error { ...@@ -302,6 +302,14 @@ func ParseForm(form url.Values, obj interface{}) error {
302 302
303 switch fieldT.Type.Kind() { 303 switch fieldT.Type.Kind() {
304 case reflect.Bool: 304 case reflect.Bool:
305 if strings.ToLower(value) == "on" || strings.ToLower(value) == "1" || strings.ToLower(value) == "yes" {
306 fieldV.SetBool(true)
307 continue
308 }
309 if strings.ToLower(value) == "off" || strings.ToLower(value) == "0" || strings.ToLower(value) == "no" {
310 fieldV.SetBool(false)
311 continue
312 }
305 b, err := strconv.ParseBool(value) 313 b, err := strconv.ParseBool(value)
306 if err != nil { 314 if err != nil {
307 return err 315 return err
...@@ -329,6 +337,19 @@ func ParseForm(form url.Values, obj interface{}) error { ...@@ -329,6 +337,19 @@ func ParseForm(form url.Values, obj interface{}) error {
329 fieldV.Set(reflect.ValueOf(value)) 337 fieldV.Set(reflect.ValueOf(value))
330 case reflect.String: 338 case reflect.String:
331 fieldV.SetString(value) 339 fieldV.SetString(value)
340 case reflect.Struct:
341 switch fieldT.Type.String() {
342 case "time.Time":
343 format := time.RFC3339
344 if len(tags) > 1 {
345 format = tags[1]
346 }
347 t, err := time.Parse(format, value)
348 if err != nil {
349 return err
350 }
351 fieldV.Set(reflect.ValueOf(t))
352 }
332 } 353 }
333 } 354 }
334 return nil 355 return nil
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!