2014-05-17 13 views
6

Cách phân tích mảng biểu mẫu html bằng Beego.Cách phân tích mảng biểu mẫu trong golang Beego

<input name="names[]" type="text" /> <input name="names[]" type="text" /> <input name="names[]" type="text" />

Go Beego

type Rsvp struct { 
    Id int  `form:"-"` 
    Names []string `form:"names[]"` 
} 

rsvp := Rsvp{} 
if err := this.ParseForm(&rsvp); err != nil { 
    //handle error 
} 

input := this.Input() 
fmt.Printf("%+v\n", input) // map[names[]:[name1 name2 name3]] 
fmt.Printf("%+v\n", rsvp) // {Names:[]} 

Tại sao phương pháp Beego ParseForm trả về một tên trống rỗng?

Cách nhận giá trị vào rsvp.Names?

Trả lời

3

Như bạn có thể nhìn thấy từ việc thực hiện các phương pháp FormValue của yêu cầu, nó sẽ trả về giá trị đầu tiên trong trường hợp nhiều người: http://golang.org/src/pkg/net/http/request.go?s=23078:23124#L795 Sẽ tốt hơn để có được những thuộc tính bản thân r.Form [key] và lặp trên tất cả các kết quả theo cách thủ công. Tôi không chắc chắn cách Beego hoạt động, nhưng chỉ cần sử dụng các yêu cầu Request.ParseForm và Request.Form hoặc Request.PostForm thô sẽ thực hiện công việc. http://golang.org/src/pkg/net/http/request.go?s=1939:6442#L61

1

Bạn có thể làm như thế này: thấy doc

v := make([]string, 0, 3) 
this.Ctx.Input.Bind(&v, "names") 
2

Cảm ơn @ysqi đã cho tôi một gợi ý. Tôi thêm một chút ví dụ chi tiết để phân tích mảng sư như dữ liệu mẫu trong beego

Dưới đây là cấu trúc hình thức của tôi:

<input name="contacts[0][email]" type="text" value="[email protected]"/> 
<input name="contacts[0][first_name]" type="text" value="f1"/> 
<input name="contacts[0][last_name]" type="text" value="l1"/> 
<input name="contacts[1][email]" type="text" value="[email protected]"/> 
<input name="contacts[1][first_name]" type="text" value="f2"/> 
<input name="contacts[1][last_name]" type="text" value="l2"/> 

golang (beego) mã:

contacts := make([]map[string]string, 0, 3) 

this.Ctx.Input.Bind(&contacts, "contacts") 

danh bạ biến:

[ 
    { 
    "email": "[email protected]", 
    "first_name": "Sam", 
    "last_name": "Gamge" 
    }, 
    { 
    "email": "[email protected]", 
    "first_name": "john", 
    "last_name": "doe" 
    } 
] 

Bây giờ bạn có thể sử dụng nó như:

for _, contact := range contacts { 
    contact["email"] 
    contact["first_name"] 
    contact["last_name"] 
} 
Các vấn đề liên quan