Skip to main content

普通请求输入

基础代码如下:路由用group绑定到控制器后,在控制器中写如下方法,以下代码均在此修改:

func (c *Controller) Params(request *ghttp.Request) {
m := request.GetQueryMap()
request.Response.WriteJson(m)
}

query参数获取

query参数是指以?a=1&b=2的形式写在url中的参数,通常由GET方法传递。

单个参数值

m := request.GetQuery("name")

GetQuery可以指定参数名称,获取对应的参数值,如果值不存在,则返回nil

还可以指定默认值,当对应参数值不存在时,返回指定的默认值

m := request.GetQuery("name", "孙行者")

返回的是一个gvar.Var 类型,可以根据需要进行类型转换,常用类型转换方法如下

func (v *Var) Bytes() []byte
func (v *Var) String() string
func (v *Var) Bool() bool
func (v *Var) Int() int
func (v *Var) Int8() int8
func (v *Var) Int16() int16
func (v *Var) Int32() int32
func (v *Var) Int64() int64
func (v *Var) Uint() uint
func (v *Var) Uint8() uint8
func (v *Var) Uint16() uint16
func (v *Var) Uint32() uint32
func (v *Var) Uint64() uint64
func (v *Var) Float32() float32
func (v *Var) Float64() float64
func (v *Var) Time(format ...string) time.Time
func (v *Var) Duration() time.Duration
func (v *Var) GTime(format ...string)

批量获取Query参数

GoFrame中提供了GetQueryMapGetQueryMapStrStrGetQueryMapStrVar三个方法用于批量获取Query参数,三个方法使用方式一致,只是返回类型不同。

  • 获取全部Query参数
m := request.GetQueryMap()
  • 指定需要获取的参数名称与默认值
m := request.GetQueryMap(map[string]interface{}{"name": "者行孙", "age": 600})

将Query参数转化为自定义结构体

可以自定义结构体,将请求参数直接转化为对应的结构体:

type user struct {
Name string
Age int
}
var u *user
err := request.ParseQuery(&u)
if err != nil {
request.Response.WritelnExit("转换出借")
}

如上,结构体中成员为NameAge,参数为nameage则参成功转换,如果结构体成员变量名与参数名不一致则无法转换,此时需要为成员变量指定其对应的参数,可以用json:/param:/p:这些方式来指定。如下

type user struct {
UserName string `json:"name"`
UserAge int `p:"age"`
}

表单参数获取(POST参数获取)

表单参数获取是指获取application/x-www-form-urlencodedapplication/form-datamultipart/form-data等数据,也可以用来获取以json格式提交的数据,简单理解即为可以获取POST方法提交的数据。

单个参数

m := request.GetForm("name")

GetForm用于指定参数名称,获取对应参数值,如果对应参数不存在,返回nil

也可以指定默认值,当指定参数不存在时,返回默认值

m := request.GetForm("name", "烧包谷")

返回的是一个gvar.Var 类型,可以根据需要进行类型转换

批量获取请求数据

可以用GetFormMapGetFormMapStrStrGetFormMapStrVar批量获取请求数据,三个方法使用方式一样,只是返回的Map类型不同。

m := request.GetFormMap()

可以指定需要获取的参数以及默认值

m := request.GetFormMap(map[string]interface{}{"name": "大洋芋"})

将请求数据转化为自定义结构体

和Query参数一样,也可以将请求参数直接转为自定义结构体。如果结构体成员名称与参数名称不一致,也可以用json:param:p:这些tag来指定对应的参数名称

type user struct {
UserName string `json:"name"`
UserAge int `p:"age"`
}
var u *user
err := request.ParseForm(&u)
if err != nil {
request.Response.WritelnExit("转换出借")
}

动态路由参数获取

动态路由需要对现有代码进行一点改动,需要先在api包中定义请求与返回数据格式,对指定的路由进行动态注册:

api

package api

import (
"github.com/gogf/gf/v2/frame/g"
)

type Res struct {
g.Meta `mime:"text/html"`
}

type ParamReq struct {
g.Meta `path:"/params/:name" method:"all"`
}

再将控制器的的方法利用api数据结构进行修改:

Controller

func (c *Controller) Params(ctx context.Context, req *api.ParamReq) (res *api.Res, err error) {
request := g.RequestFromCtx(ctx)
u := request.GetRouter("name")
request.Response.WriteJson(g.Map{"data": u})
return
}

获取单个参数

u := request.GetRouter("name")

返回gvar.Var类型,可以按需要进行类型转换。也可以指定默认值。

批量获取参数

u := request.GetRouterMap()

返回值为map[string]string。如果没有设置动态路由,则返回nil

所有请求参数获取

GoFrame中还提供了一些方法获取所有请求参数,用法与上面两种类似,只是不区分请求方法。如果GET和POST提供的参数名称相同,则POST参数优先。

获取单个参数

data := request.GetRequest("name")
// 简写
data := request.Get("name")

返回gvar.Var类型,可以提供默认值。

批量获取请求参数

data := request.GetRequestMap()
// 可以指定需要获取的参数名及默认值
data := request.GetRequestMap(g.Map{"name": ""})
// 还有以下几种
data := request.GetRequestMapStrStr()
data := request.GetRequestMapStrVar()

将请求参数转为自定义结构体

request.Parse(&u) // u为自定义结构体指针