mirror of
https://github.com/kataras/iris.git
synced 2025-03-14 08:26:26 +01:00
allow handle same param path types with different macro functions as well, a use case: #1058
Former-commit-id: e7dcc5c0d9a2e3569e0f49303ff342bb8748baf5
This commit is contained in:
parent
c6099a3c3b
commit
0a29c2bfc8
|
@ -142,7 +142,9 @@ func (repo *repository) getAll() []*Route {
|
|||
|
||||
func (repo *repository) register(route *Route) {
|
||||
for i, r := range repo.routes {
|
||||
if route.Equal(r) {
|
||||
// 14 August 2019 allow register same path pattern with different macro functions,
|
||||
// see #1058
|
||||
if route.DeepEqual(r) {
|
||||
// replace existing with the latest one.
|
||||
repo.routes = append(repo.routes[:i], repo.routes[i+1:]...)
|
||||
continue
|
||||
|
|
|
@ -234,10 +234,10 @@ func splitSubdomainAndPath(fullUnparsedPath string) (subdomain string, path stri
|
|||
slashIdx := strings.IndexByte(s, '/')
|
||||
if slashIdx == 0 {
|
||||
// no subdomain
|
||||
return "", cleanPath(s)
|
||||
return "", s // cleanPath(s)
|
||||
}
|
||||
|
||||
return s[0:slashIdx], cleanPath(s[slashIdx:]) // return subdomain without slash, path with slash
|
||||
return s[0:slashIdx], s[slashIdx:] // cleanPath(s[slashIdx:]) // return subdomain without slash, path with slash
|
||||
}
|
||||
|
||||
// RoutePathReverserOption option signature for the RoutePathReverser.
|
||||
|
|
|
@ -80,6 +80,7 @@ func NewRoute(method, subdomain, unparsedPath, mainHandlerName string,
|
|||
MainHandlerName: mainHandlerName,
|
||||
FormattedPath: formattedPath,
|
||||
}
|
||||
|
||||
return route, nil
|
||||
}
|
||||
|
||||
|
@ -157,13 +158,20 @@ func (r Route) String() string {
|
|||
r.Method, r.Subdomain, r.Tmpl().Src)
|
||||
}
|
||||
|
||||
// Equal compares the method, subdomaind and the
|
||||
// Equal compares the method, subdomain and the
|
||||
// underline representation of the route's path,
|
||||
// instead of the `String` function which returns the front representation.
|
||||
func (r *Route) Equal(other *Route) bool {
|
||||
return r.Method == other.Method && r.Subdomain == other.Subdomain && r.Path == other.Path
|
||||
}
|
||||
|
||||
// DeepEqual compares the method, subdomain, the
|
||||
// underline representation of the route's path,
|
||||
// and the template source.
|
||||
func (r *Route) DeepEqual(other *Route) bool {
|
||||
return r.Equal(other) && r.tmpl.Src == other.tmpl.Src
|
||||
}
|
||||
|
||||
// Tmpl returns the path template,
|
||||
// it contains the parsed template
|
||||
// for the route's path.
|
||||
|
|
Loading…
Reference in New Issue
Block a user