mirror of https://github.com/gin-gonic/gin.git
Implement QueryArray and PostArray methods
This commit is contained in:
parent
4a6bc4aac4
commit
9366e33ffc
41
context.go
41
context.go
|
@ -236,6 +236,23 @@ func (c *Context) GetQuery(key string) (string, bool) {
|
||||||
return "", false
|
return "", false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// QueryArray returns a slice of strings for a given query key.
|
||||||
|
// The length of the slice depends on the number of params with the given key.
|
||||||
|
func (c *Context) QueryArray(key string) []string {
|
||||||
|
values, _ := c.GetQueryArray(key)
|
||||||
|
return values
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryArray returns a slice of strings for a given query key, plus
|
||||||
|
// a boolean value whether at least one value exists for the given key.
|
||||||
|
func (c *Context) GetQueryArray(key string) ([]string, bool) {
|
||||||
|
req := c.Request
|
||||||
|
if values, ok := req.URL.Query()[key]; ok && len(values) > 0 {
|
||||||
|
return values, true
|
||||||
|
}
|
||||||
|
return []string{}, false
|
||||||
|
}
|
||||||
|
|
||||||
// PostForm returns the specified key from a POST urlencoded form or multipart form
|
// PostForm returns the specified key from a POST urlencoded form or multipart form
|
||||||
// when it exists, otherwise it returns an empty string `("")`.
|
// when it exists, otherwise it returns an empty string `("")`.
|
||||||
func (c *Context) PostForm(key string) string {
|
func (c *Context) PostForm(key string) string {
|
||||||
|
@ -274,6 +291,30 @@ func (c *Context) GetPostForm(key string) (string, bool) {
|
||||||
return "", false
|
return "", false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PostFormArray returns a slice of strings for a given form key.
|
||||||
|
// The length of the slice depends on the number of params with the given key.
|
||||||
|
func (c *Context) PostFormArray(key string) []string {
|
||||||
|
values, _ := c.GetPostFormArray(key)
|
||||||
|
return values
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPostFormArray returns a slice of strings for a given form key, plus
|
||||||
|
// a boolean value whether at least one value exists for the given key.
|
||||||
|
func (c *Context) GetPostFormArray(key string) ([]string, bool) {
|
||||||
|
req := c.Request
|
||||||
|
req.ParseForm()
|
||||||
|
req.ParseMultipartForm(32 << 20) // 32 MB
|
||||||
|
if values := req.PostForm[key]; len(values) > 0 {
|
||||||
|
return values, true
|
||||||
|
}
|
||||||
|
if req.MultipartForm != nil && req.MultipartForm.File != nil {
|
||||||
|
if values := req.MultipartForm.Value[key]; len(values) > 0 {
|
||||||
|
return values, true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return []string{}, false
|
||||||
|
}
|
||||||
|
|
||||||
// Bind checks the Content-Type to select a binding engine automatically,
|
// Bind checks the Content-Type to select a binding engine automatically,
|
||||||
// Depending the "Content-Type" header different bindings are used:
|
// Depending the "Content-Type" header different bindings are used:
|
||||||
// "application/json" --> JSON binding
|
// "application/json" --> JSON binding
|
||||||
|
|
|
@ -251,6 +251,22 @@ func TestContextQueryAndPostForm(t *testing.T) {
|
||||||
assert.Equal(t, obj.Page, 11)
|
assert.Equal(t, obj.Page, 11)
|
||||||
assert.Equal(t, obj.Both, "")
|
assert.Equal(t, obj.Both, "")
|
||||||
assert.Equal(t, obj.Array, []string{"first", "second"})
|
assert.Equal(t, obj.Array, []string{"first", "second"})
|
||||||
|
|
||||||
|
values, ok := c.GetQueryArray("array[]")
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Equal(t, "first", values[0])
|
||||||
|
assert.Equal(t, "second", values[1])
|
||||||
|
|
||||||
|
values = c.QueryArray("array[]")
|
||||||
|
assert.Equal(t, "first", values[0])
|
||||||
|
assert.Equal(t, "second", values[1])
|
||||||
|
|
||||||
|
values = c.QueryArray("nokey")
|
||||||
|
assert.Equal(t, 0, len(values))
|
||||||
|
|
||||||
|
values = c.QueryArray("both")
|
||||||
|
assert.Equal(t, 1, len(values))
|
||||||
|
assert.Equal(t, "GET", values[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContextPostFormMultipart(t *testing.T) {
|
func TestContextPostFormMultipart(t *testing.T) {
|
||||||
|
@ -299,6 +315,22 @@ func TestContextPostFormMultipart(t *testing.T) {
|
||||||
assert.False(t, ok)
|
assert.False(t, ok)
|
||||||
assert.Empty(t, value)
|
assert.Empty(t, value)
|
||||||
assert.Equal(t, c.DefaultPostForm("nokey", "nothing"), "nothing")
|
assert.Equal(t, c.DefaultPostForm("nokey", "nothing"), "nothing")
|
||||||
|
|
||||||
|
values, ok := c.GetPostFormArray("array")
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Equal(t, "first", values[0])
|
||||||
|
assert.Equal(t, "second", values[1])
|
||||||
|
|
||||||
|
values = c.PostFormArray("array")
|
||||||
|
assert.Equal(t, "first", values[0])
|
||||||
|
assert.Equal(t, "second", values[1])
|
||||||
|
|
||||||
|
values = c.PostFormArray("nokey")
|
||||||
|
assert.Equal(t, 0, len(values))
|
||||||
|
|
||||||
|
values = c.PostFormArray("foo")
|
||||||
|
assert.Equal(t, 1, len(values))
|
||||||
|
assert.Equal(t, "bar", values[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContextSetCookie(t *testing.T) {
|
func TestContextSetCookie(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue