当前位置:K88软件开发文章中心网站服务器框架Revel → 文章内容

Revel 参数绑定

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-25 14:26:59

由 jinlunxue 创建,路飞 最后一次修改 2016-02-24 Revel 尽可能让客户端传来的参数转换成Go语言的数据类型变得简单。这种从字符串转换成另外一种类型被称为“数据绑定”。参数所有的请求参数被收集到一个单独的 Params 对象中. 包括:URL 路径参数URL 查询参数表单字段 (Multipart or not)文件上传Params对象定义在 (godoc)中:type Params struct { url.Values Files map[string][]*multipart.FileHeader}嵌入的 url.Values (godoc) 提供了简单值的查询支持, 但是开发者可以更方便的使用Revel的数据绑定支持,提取参数到任意的数据类型。控制器方法参数绑定参数可以直接绑定到控制器方法,例如:func (c AppController) Action(name string, ids []int, user User, img []byte) revel.Result { ...}在控制器方法执行之前, Revel 通过变量名称绑定器解析参数到指定的数据类型,如果解析参数失败, 参数将被解析到目标数据类型的初始值。绑定器使用 Revel 的绑定器绑定一个参数到指定的数据类型 (godoc),它集成了Params对象。例如:func (c SomeController) Action() revel.Result { var ids []int c.Params.Bind(&ids, "ids") ...}支持的数据类型有:IntBoolPointSliceStructtime.Time文件上传:*os.File, []byte, io.Reader, io.ReadSeeker数据类型绑定的语法描述如下,详细内容描述也可以参考 源代码。Booleans字符串 “true”, “on”, 和 “1” 被绑定到 true,其他的为 false.Slices切片绑定有两种语法:有序和无序有序:?ids[0]=1&ids[1]=2&ids[3]=4绑定结果为 []int{1, 2, 0, 4}无序:?ids[]=1&ids[]=2&ids[]=3绑定结果为 []int{1, 2, 3}注意: 只有有序切片可以绑定到一个 []Struct:?user[0].Id=1&user[0].Name=rob&user[1].Id=2&user[1].Name=jennyStructStruct简单的使用一个 . 进行绑定:?user.Id=1&user.Name=rob&user.Friends[]=2&user.Friends[]=3&user.Father.Id=5&user.Father.Name=Hermes绑定到下面的struct类型:type User struct { Id int Name string Friends []int Father User}注意: struct中的字段必须是导出的(首字母大写)。Date / Time内置的 SQL 标准时间格式 [“2006-01-02”, “2006-01-02 15:04”]使用 Revel官方模式 简单的添加时间格式到 TimeFormats 变量:func init() { revel.TimeFormats = append(revel.TimeFormats, "01/02/2006")}文件上传文件上传参数可以绑定到以下几种类型:*os.File[]byteio.Readerio.ReadSeeker它是 Go的 multipart 包 的一个包装器. 文件保存在内存中,如果文件大小超过10MB(默认值), 就会被保存到一个临时文件中。注意: 绑定 os.File类型,会保存到临时文件 (如果没有的话),所以效率低。自定义绑定器应用程序可以定义绑定器。自定义绑定器需要实现 binder 接口并注册自定义类型:var myBinder = revel.Binder{ Bind: func(params *revel.Params, name string, typ reflect.Type) reflect.Value {...}, Unbind: func(output map[string]string, name string, val interface{}) {...},}func init() { revel.TypeBinders[reflect.TypeOf(MyType{})] = myBinder

Revel 参数绑定