diff --git a/context.go b/context.go index b1352b9b..85b3ef30 100644 --- a/context.go +++ b/context.go @@ -661,6 +661,11 @@ func (c *Context) BindHeader(obj any) error { return c.MustBindWith(obj, binding.Header) } +// BindForm is a shortcut for c.MustBindWith(obj, binding.Form) +func (c *Context) BindForm(obj any) error { + return c.MustBindWith(obj, binding.Form) +} + // BindUri binds the passed struct pointer using binding.Uri. // It will abort the request with HTTP 400 if any error occurs. func (c *Context) BindUri(obj any) error { diff --git a/context_test.go b/context_test.go index 85e0a616..c6e88a95 100644 --- a/context_test.go +++ b/context_test.go @@ -1628,6 +1628,33 @@ func TestContextBindWithXML(t *testing.T) { assert.Equal(t, 0, w.Body.Len()) } +func TestContextBindForm(t *testing.T) { + w := httptest.NewRecorder() + c, _ := CreateTestContext(w) + + c.Request, _ = http.NewRequest("POST", "/", nil) + + c.Request.ParseForm() + + c.Request.Form.Add("rate", "8000") + c.Request.Form.Add("domain", "music") + c.Request.Form.Add("limit", "1000") + + var testHeader struct { + Rate int `form:"rate"` + Domain string `form:"domain"` + Limit int `form:"limit"` + Fake string `form:"fake"` + } + + assert.NoError(t, c.BindForm(&testHeader)) + assert.Equal(t, 8000, testHeader.Rate) + assert.Equal(t, "music", testHeader.Domain) + assert.Equal(t, 1000, testHeader.Limit) + assert.Equal(t, "", testHeader.Fake) + assert.Equal(t, 0, w.Body.Len()) +} + func TestContextBindHeader(t *testing.T) { w := httptest.NewRecorder() c, _ := CreateTestContext(w)