请求绑定
buffalo.Context接口有一个名为的Bind方法,此方法允许将请求中的数据(例如请求中的get参数,表单数据,post中的参数、post中的json内容)绑定映射到结构中,方便在action中使用这些结构数据。
更多信息参考github.com/gobuffalo/buffalo/binding
它是如何工作的?
该Bind函数通过查看请求Content-Type或Accept标头以及查找binding.Binder接口的映射实现来工作。
映射HTML内容
application/htmltext/htmlapplication/x-www-form-urlencodedmultipart/form-datahtml-
映射JSON内容
application/jsontext/jsonjson
映射XML内容
application/xmltext/xmlxml
表单绑定
下面是一个将User结构和表单绑定的样例:
type User struct {
Name string `form:"name"`
Email string
Password string `form:"-"`
}
<form>
<input type="text" value="ringo" name="name"/>
<input type="text" value="ringo@beatles.com" name="Email"/>
<input type="text" value="starr" name="Password"/>
<input type="submit"/>
</form>
在action中就可以使用绑定方法了:
func UserInsert(c buffalo.Context) error {
u := &User{}
if err := c.Bind(u); err != nil {
return err
}
u.Name // "Ringo"
u.Email // "ringo@beatles.com"
u.Password // ""
// do more work
}
表单和结构之间的映射是在结构体中定义的。如果结构体中有form定义,就会使用form中定义的名称,如上面User结构中的Name对应的name,如果没有定义form,就会默认使用结构的字段名,如User结构中的Email,表单中也需要是首字母大写的Email。同时也可以通过在form中定义"-"来表示,在表单中忽略这个字段的映射,如User结构中的Password。
JSON和XML绑定
默认情况下,使用标准库中的encoding/json和encoding/xml包绑定JSON和XML请求。
下面是一个从json数据中获取User数据的样例(xml也同,结构定义中的tag也相应改为xml)
type User struct {
Name string `json:"name"`
Email string `json:"email"`
Password string `json:"-"`
}
{
"name": "Ringo",
"email": "ringo@beatles.com",
"password": "starr"
}
在这个例子中,我们可以将此JSON有效内容绑定到User结构,如下所示:
func MyAction(c buffalo.Context) error {
u := &User{}
if err := c.Bind(u); err != nil {
return err
}
u.Name // "Ringo"
u.Email // "ringo@beatles.com"
u.Password // ""
// do more work
}
有关在结构体中标记json和xml的更多信息,请参阅标准库文档。
Buffalo中文文档
关于 LearnKu