support #761
type Test struct {
Date time.Time `form:"Date, 2006-01-02"`
Save bool `form:"Save"`
}
Showing
1 changed file
with
21 additions
and
0 deletions
| ... | @@ -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 | ... | ... |
-
Please register or sign in to post a comment