// Copyright 2017 gf Author(https://github.com/gogf/gf). All Rights Reserved. // // This Source Code Form is subject to the terms of the MIT License. // If a copy of the MIT was not distributed with this file, // You can obtain one at https://github.com/gogf/gf. package ghttp import ( "github.com/gogf/gf/container/gvar" "github.com/gogf/gf/internal/structs" "github.com/gogf/gf/util/gconv" ) // GetRequest retrieves and returns the parameter named passed from client as interface{}, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. // // GetRequest is one of the most commonly used functions for retrieving parameters. // // Note that if there're multiple parameters with the same name, the parameters are retrieved and overwrote // in order of priority: router < query < body < form < custom. func (r *Request) GetRequest(key string, def ...interface{}) interface{} { value := r.GetParam(key) if value == nil { value = r.GetForm(key) } if value == nil { r.ParseBody() if len(r.bodyMap) > 0 { value = r.bodyMap[key] } } if value == nil { value = r.GetQuery(key) } if value == nil { value = r.GetRouterValue(key) } if value != nil { return value } if len(def) > 0 { return def[0] } return value } // GetRequestVar retrieves and returns the parameter named passed from client as *gvar.Var, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestVar(key string, def ...interface{}) *gvar.Var { return gvar.New(r.GetRequest(key, def...)) } // GetRequestString retrieves and returns the parameter named passed from client as string, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestString(key string, def ...interface{}) string { return r.GetRequestVar(key, def...).String() } // GetRequestBool retrieves and returns the parameter named passed from client as bool, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestBool(key string, def ...interface{}) bool { return r.GetRequestVar(key, def...).Bool() } // GetRequestInt retrieves and returns the parameter named passed from client as int, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestInt(key string, def ...interface{}) int { return r.GetRequestVar(key, def...).Int() } // GetRequestInt32 retrieves and returns the parameter named passed from client as int32, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestInt32(key string, def ...interface{}) int32 { return r.GetRequestVar(key, def...).Int32() } // GetRequestInt64 retrieves and returns the parameter named passed from client as int64, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestInt64(key string, def ...interface{}) int64 { return r.GetRequestVar(key, def...).Int64() } // GetRequestInts retrieves and returns the parameter named passed from client as []int, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestInts(key string, def ...interface{}) []int { return r.GetRequestVar(key, def...).Ints() } // GetRequestUint retrieves and returns the parameter named passed from client as uint, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestUint(key string, def ...interface{}) uint { return r.GetRequestVar(key, def...).Uint() } // GetRequestUint32 retrieves and returns the parameter named passed from client as uint32, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestUint32(key string, def ...interface{}) uint32 { return r.GetRequestVar(key, def...).Uint32() } // GetRequestUint64 retrieves and returns the parameter named passed from client as uint64, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestUint64(key string, def ...interface{}) uint64 { return r.GetRequestVar(key, def...).Uint64() } // GetRequestFloat32 retrieves and returns the parameter named passed from client as float32, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestFloat32(key string, def ...interface{}) float32 { return r.GetRequestVar(key, def...).Float32() } // GetRequestFloat64 retrieves and returns the parameter named passed from client as float64, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestFloat64(key string, def ...interface{}) float64 { return r.GetRequestVar(key, def...).Float64() } // GetRequestFloats retrieves and returns the parameter named passed from client as []float64, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestFloats(key string, def ...interface{}) []float64 { return r.GetRequestVar(key, def...).Floats() } // GetRequestArray retrieves and returns the parameter named passed from client as []string, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestArray(key string, def ...interface{}) []string { return r.GetRequestVar(key, def...).Strings() } // GetRequestStrings retrieves and returns the parameter named passed from client as []string, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestStrings(key string, def ...interface{}) []string { return r.GetRequestVar(key, def...).Strings() } // GetRequestInterfaces retrieves and returns the parameter named passed from client as []interface{}, // no matter what HTTP method the client is using. The parameter specifies the default value // if the does not exist. func (r *Request) GetRequestInterfaces(key string, def ...interface{}) []interface{} { return r.GetRequestVar(key, def...).Interfaces() } // GetRequestMap retrieves and returns all parameters passed from client as map, // no matter what HTTP method the client is using. The parameter specifies the keys // retrieving from client parameters, the associated values are the default values if the client // does not pass the according keys. // // GetRequestMap is one of the most commonly used functions for retrieving parameters. // // Note that if there're multiple parameters with the same name, the parameters are retrieved and overwrote // in order of priority: router < query < body < form < custom. func (r *Request) GetRequestMap(kvMap ...map[string]interface{}) map[string]interface{} { r.ParseQuery() r.ParseForm() r.ParseBody() var ok, filter bool var length int if len(kvMap) > 0 && kvMap[0] != nil { length = len(kvMap[0]) filter = true } else { length = len(r.routerMap) + len(r.queryMap) + len(r.formMap) + len(r.bodyMap) + len(r.paramsMap) } m := make(map[string]interface{}, length) for k, v := range r.routerMap { if filter { if _, ok = kvMap[0][k]; !ok { continue } } m[k] = v } for k, v := range r.queryMap { if filter { if _, ok = kvMap[0][k]; !ok { continue } } m[k] = v } for k, v := range r.formMap { if filter { if _, ok = kvMap[0][k]; !ok { continue } } m[k] = v } for k, v := range r.bodyMap { if filter { if _, ok = kvMap[0][k]; !ok { continue } } m[k] = v } for k, v := range r.paramsMap { if filter { if _, ok = kvMap[0][k]; !ok { continue } } m[k] = v } // Check none exist parameters and assign it with default value. if filter { for k, v := range kvMap[0] { if _, ok = m[k]; !ok { m[k] = v } } } return m } // GetRequestMapStrStr retrieves and returns all parameters passed from client as map[string]string, // no matter what HTTP method the client is using. The parameter specifies the keys // retrieving from client parameters, the associated values are the default values if the client // does not pass. func (r *Request) GetRequestMapStrStr(kvMap ...map[string]interface{}) map[string]string { requestMap := r.GetRequestMap(kvMap...) if len(requestMap) > 0 { m := make(map[string]string, len(requestMap)) for k, v := range requestMap { m[k] = gconv.String(v) } return m } return nil } // GetRequestMapStrVar retrieves and returns all parameters passed from client as map[string]*gvar.Var, // no matter what HTTP method the client is using. The parameter specifies the keys // retrieving from client parameters, the associated values are the default values if the client // does not pass. func (r *Request) GetRequestMapStrVar(kvMap ...map[string]interface{}) map[string]*gvar.Var { requestMap := r.GetRequestMap(kvMap...) if len(requestMap) > 0 { m := make(map[string]*gvar.Var, len(requestMap)) for k, v := range requestMap { m[k] = gvar.New(v) } return m } return nil } // GetRequestStruct retrieves all parameters passed from client no matter what HTTP method the client is using, // and converts them to given struct object. Note that the parameter is a pointer to the struct object. // The optional parameter is used to specify the key to attribute mapping. func (r *Request) GetRequestStruct(pointer interface{}, mapping ...map[string]string) error { tagMap := structs.TagMapName(pointer, paramTagPriority, true) if len(mapping) > 0 { for k, v := range mapping[0] { tagMap[k] = v } } return gconv.StructDeep(r.GetRequestMap(), pointer, tagMap) } // GetRequestToStruct is alias of GetRequestStruct. See GetRequestStruct. // Deprecated. func (r *Request) GetRequestToStruct(pointer interface{}, mapping ...map[string]string) error { return r.GetRequestStruct(pointer, mapping...) }