diff --git a/context.go b/context.go index 391adafe..99ddd5c1 100644 --- a/context.go +++ b/context.go @@ -672,6 +672,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 { @@ -746,6 +751,11 @@ func (c *Context) ShouldBindUri(obj any) error { return binding.Uri.BindUri(m, obj) } +// ShouldBindForm is shortcut for c.ShouldBindWith(obj, binding.Form). +func (c *Context) ShouldBindForm(obj any) error { + return c.ShouldBindWith(obj, binding.Form) +} + // ShouldBindWith binds the passed struct pointer using the specified binding engine. // See the binding package. func (c *Context) ShouldBindWith(obj any, b binding.Binding) error { diff --git a/context_test.go b/context_test.go index e9bbae52..6fc4b52c 100644 --- a/context_test.go +++ b/context_test.go @@ -1657,6 +1657,62 @@ 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) + + if err := c.Request.ParseForm(); err != nil { + t.Error(err.Error()) + } + + 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 TestContextShouldBindForm(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.ShouldBindForm(&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)