github.com/gogf/gf@v1.16.9/net/ghttp/ghttp_request_param_query.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package ghttp 8 9 import ( 10 "github.com/gogf/gf/container/gvar" 11 12 "github.com/gogf/gf/util/gconv" 13 ) 14 15 // SetQuery sets custom query value with key-value pair. 16 func (r *Request) SetQuery(key string, value interface{}) { 17 r.parseQuery() 18 if r.queryMap == nil { 19 r.queryMap = make(map[string]interface{}) 20 } 21 r.queryMap[key] = value 22 } 23 24 // GetQuery retrieves and returns parameter with given name <key> from query string 25 // and request body. It returns <def> if <key> does not exist in the query and <def> is given, 26 // or else it returns nil. 27 // 28 // Note that if there're multiple parameters with the same name, the parameters are retrieved 29 // and overwrote in order of priority: query > body. 30 func (r *Request) GetQuery(key string, def ...interface{}) interface{} { 31 r.parseQuery() 32 if len(r.queryMap) > 0 { 33 if v, ok := r.queryMap[key]; ok { 34 return v 35 } 36 } 37 if r.Method == "GET" { 38 r.parseBody() 39 } 40 if len(r.bodyMap) > 0 { 41 if v, ok := r.bodyMap[key]; ok { 42 return v 43 } 44 } 45 if len(def) > 0 { 46 return def[0] 47 } 48 return nil 49 } 50 51 func (r *Request) GetQueryVar(key string, def ...interface{}) *gvar.Var { 52 return gvar.New(r.GetQuery(key, def...)) 53 } 54 55 func (r *Request) GetQueryString(key string, def ...interface{}) string { 56 return r.GetQueryVar(key, def...).String() 57 } 58 59 func (r *Request) GetQueryBool(key string, def ...interface{}) bool { 60 return r.GetQueryVar(key, def...).Bool() 61 } 62 63 func (r *Request) GetQueryInt(key string, def ...interface{}) int { 64 return r.GetQueryVar(key, def...).Int() 65 } 66 67 func (r *Request) GetQueryInt32(key string, def ...interface{}) int32 { 68 return r.GetQueryVar(key, def...).Int32() 69 } 70 71 func (r *Request) GetQueryInt64(key string, def ...interface{}) int64 { 72 return r.GetQueryVar(key, def...).Int64() 73 } 74 75 func (r *Request) GetQueryInts(key string, def ...interface{}) []int { 76 return r.GetQueryVar(key, def...).Ints() 77 } 78 79 func (r *Request) GetQueryUint(key string, def ...interface{}) uint { 80 return r.GetQueryVar(key, def...).Uint() 81 } 82 83 func (r *Request) GetQueryUint32(key string, def ...interface{}) uint32 { 84 return r.GetQueryVar(key, def...).Uint32() 85 } 86 87 func (r *Request) GetQueryUint64(key string, def ...interface{}) uint64 { 88 return r.GetQueryVar(key, def...).Uint64() 89 } 90 91 func (r *Request) GetQueryFloat32(key string, def ...interface{}) float32 { 92 return r.GetQueryVar(key, def...).Float32() 93 } 94 95 func (r *Request) GetQueryFloat64(key string, def ...interface{}) float64 { 96 return r.GetQueryVar(key, def...).Float64() 97 } 98 99 func (r *Request) GetQueryFloats(key string, def ...interface{}) []float64 { 100 return r.GetQueryVar(key, def...).Floats() 101 } 102 103 func (r *Request) GetQueryArray(key string, def ...interface{}) []string { 104 return r.GetQueryVar(key, def...).Strings() 105 } 106 107 func (r *Request) GetQueryStrings(key string, def ...interface{}) []string { 108 return r.GetQueryVar(key, def...).Strings() 109 } 110 111 func (r *Request) GetQueryInterfaces(key string, def ...interface{}) []interface{} { 112 return r.GetQueryVar(key, def...).Interfaces() 113 } 114 115 // GetQueryMap retrieves and returns all parameters passed from client using HTTP GET method 116 // as map. The parameter <kvMap> specifies the keys retrieving from client parameters, 117 // the associated values are the default values if the client does not pass. 118 // 119 // Note that if there're multiple parameters with the same name, the parameters are retrieved and overwrote 120 // in order of priority: query > body. 121 func (r *Request) GetQueryMap(kvMap ...map[string]interface{}) map[string]interface{} { 122 r.parseQuery() 123 if r.Method == "GET" { 124 r.parseBody() 125 } 126 var m map[string]interface{} 127 if len(kvMap) > 0 && kvMap[0] != nil { 128 if len(r.queryMap) == 0 && len(r.bodyMap) == 0 { 129 return kvMap[0] 130 } 131 m = make(map[string]interface{}, len(kvMap[0])) 132 if len(r.bodyMap) > 0 { 133 for k, v := range kvMap[0] { 134 if postValue, ok := r.bodyMap[k]; ok { 135 m[k] = postValue 136 } else { 137 m[k] = v 138 } 139 } 140 } 141 if len(r.queryMap) > 0 { 142 for k, v := range kvMap[0] { 143 if postValue, ok := r.queryMap[k]; ok { 144 m[k] = postValue 145 } else { 146 m[k] = v 147 } 148 } 149 } 150 } else { 151 m = make(map[string]interface{}, len(r.queryMap)+len(r.bodyMap)) 152 for k, v := range r.bodyMap { 153 m[k] = v 154 } 155 for k, v := range r.queryMap { 156 m[k] = v 157 } 158 } 159 return m 160 } 161 162 // GetQueryMapStrStr retrieves and returns all parameters passed from client using HTTP GET method 163 // as map[string]string. The parameter <kvMap> specifies the keys 164 // retrieving from client parameters, the associated values are the default values if the client 165 // does not pass. 166 func (r *Request) GetQueryMapStrStr(kvMap ...map[string]interface{}) map[string]string { 167 queryMap := r.GetQueryMap(kvMap...) 168 if len(queryMap) > 0 { 169 m := make(map[string]string, len(queryMap)) 170 for k, v := range queryMap { 171 m[k] = gconv.String(v) 172 } 173 return m 174 } 175 return nil 176 } 177 178 // GetQueryMapStrVar retrieves and returns all parameters passed from client using HTTP GET method 179 // as map[string]*gvar.Var. The parameter <kvMap> specifies the keys 180 // retrieving from client parameters, the associated values are the default values if the client 181 // does not pass. 182 func (r *Request) GetQueryMapStrVar(kvMap ...map[string]interface{}) map[string]*gvar.Var { 183 queryMap := r.GetQueryMap(kvMap...) 184 if len(queryMap) > 0 { 185 m := make(map[string]*gvar.Var, len(queryMap)) 186 for k, v := range queryMap { 187 m[k] = gvar.New(v) 188 } 189 return m 190 } 191 return nil 192 } 193 194 // GetQueryStruct retrieves all parameters passed from client using HTTP GET method 195 // and converts them to given struct object. Note that the parameter <pointer> is a pointer 196 // to the struct object. The optional parameter <mapping> is used to specify the key to 197 // attribute mapping. 198 func (r *Request) GetQueryStruct(pointer interface{}, mapping ...map[string]string) error { 199 _, err := r.doGetQueryStruct(pointer, mapping...) 200 return err 201 } 202 203 func (r *Request) doGetQueryStruct(pointer interface{}, mapping ...map[string]string) (data map[string]interface{}, err error) { 204 r.parseQuery() 205 data = r.GetQueryMap() 206 if data == nil { 207 data = map[string]interface{}{} 208 } 209 if err := r.mergeDefaultStructValue(data, pointer); err != nil { 210 return data, nil 211 } 212 return data, gconv.Struct(data, pointer, mapping...) 213 }