Browse Source

Add support for queries in URL reversing.

pull/251/merge
Pavel Ivanov 9 years ago committed by Kamil Kisiel
parent
commit
9c9af153a1
  1. 3
      regexp.go
  2. 9
      route.go

3
regexp.go

@ -178,6 +178,9 @@ func (r *routeRegexp) url(values map[string]string) (string, error) { @@ -178,6 +178,9 @@ func (r *routeRegexp) url(values map[string]string) (string, error) {
if !ok {
return "", fmt.Errorf("mux: missing route variable %q", v)
}
if r.matchQuery {
value = url.QueryEscape(value)
}
urlValues[k] = value
}
rv := fmt.Sprintf(r.reverse, urlValues...)

9
route.go

@ -482,6 +482,7 @@ func (r *Route) URL(pairs ...string) (*url.URL, error) { @@ -482,6 +482,7 @@ func (r *Route) URL(pairs ...string) (*url.URL, error) {
return nil, err
}
var scheme, host, path string
queries := make([]string, 0, len(r.regexp.queries))
if r.regexp.host != nil {
if host, err = r.regexp.host.url(values); err != nil {
return nil, err
@ -496,10 +497,18 @@ func (r *Route) URL(pairs ...string) (*url.URL, error) { @@ -496,10 +497,18 @@ func (r *Route) URL(pairs ...string) (*url.URL, error) {
return nil, err
}
}
for _, q := range r.regexp.queries {
var query string
if query, err = q.url(values); err != nil {
return nil, err
}
queries = append(queries, query)
}
return &url.URL{
Scheme: scheme,
Host: host,
Path: path,
RawQuery: strings.Join(queries, "&"),
}, nil
}

Loading…
Cancel
Save