参数绑定

    所有的请求参数被收集到一个单独的 对象中. 包括:

    • URL 路径参数
    • URL 查询参数
    • 表单字段 (Multipart or not)
    • 文件上传
      Params对象定义在 (godoc)中:

    嵌入的 url.Values () 提供了简单值的查询支持, 但是开发者可以更方便的使用Revel的数据绑定支持,提取参数到任意的数据类型。

    参数可以直接绑定到控制器方法,例如:

    1. func (c AppController) Action(name string, ids []int, user User, img []byte) revel.Result {
    2. ...

    在控制器方法执行之前, Revel 通过变量名称绑定器解析参数到指定的数据类型,如果解析参数失败, 参数将被解析到目标数据类型的初始值。

    使用 Revel 的绑定器绑定一个参数到指定的数据类型 (godoc),它集成了Params对象。例如:

    1. func (c SomeController) Action() revel.Result {
    2. var ids []int
    3. c.Params.Bind(&ids, "ids")
    4. ...
    5. }

    支持的数据类型有:

    • Int
    • Bool
    • Point
    • Slice
    • Struct
    • time.Time
    • 文件上传:*os.File, []byte, io.Reader, io.ReadSeeker
      数据类型绑定的语法描述如下,详细内容描述也可以参考 。

    Slices

    切片绑定有两种语法:有序和无序

    有序:

    绑定结果为 []int{1, 2, 0, 4}

    无序:

    1. ?ids[]=1
    2. &ids[]=3

    绑定结果为 []int{1, 2, 3}

    注意: 只有有序切片可以绑定到一个 []Struct:

    1. &user[1].Id=2
    2. &user[1].Name=jenny

    绑定到下面的struct类型:

    1. type User struct {
    2. Id int
    3. Name string
    4. Friends []int
    5. Father User
    6. }

    注意: struct中的字段必须是导出的(首字母大写)。

    Date / Time

    内置的 SQL 标准时间格式 [“2006-01-02”, “2006-01-02 15:04”]

    使用 Revel官方模式 简单的添加时间格式到 TimeFormats 变量:

    1. func init() {
    2. revel.TimeFormats = append(revel.TimeFormats, "01/02/2006")
    3. }

    文件上传参数可以绑定到以下几种类型:

    • *os.File
    • []byte
    • io.Reader

    注意: 绑定 类型,会保存到临时文件 (如果没有的话),所以效率低。

    自定义绑定器

    自定义绑定器需要实现 binder 接口并注册自定义类型: