From 00b710e168b91518173a2a023457f994ced3e40b Mon Sep 17 00:00:00 2001 From: astaxie Date: Wed, 11 Jun 2014 23:51:19 +0800 Subject: [PATCH] beego:namespace sub router add url to pattern --- namespace.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/namespace.go b/namespace.go index ca902788..e4935ac3 100644 --- a/namespace.go +++ b/namespace.go @@ -198,10 +198,12 @@ func (n *Namespace) Namespace(ns ...*Namespace) *Namespace { for _, ni := range ns { for k, v := range ni.handlers.routers { if t, ok := n.handlers.routers[k]; ok { + addPrefix(v, ni.prefix) n.handlers.routers[k].AddTree(ni.prefix, v) } else { t = NewTree() t.AddTree(ni.prefix, v) + addPrefix(t, ni.prefix) n.handlers.routers[k] = t } } @@ -225,10 +227,12 @@ func AddNamespace(nl ...*Namespace) { for _, n := range nl { for k, v := range n.handlers.routers { if t, ok := BeeApp.Handlers.routers[k]; ok { + addPrefix(v, n.prefix) BeeApp.Handlers.routers[k].AddTree(n.prefix, v) } else { t = NewTree() t.AddTree(n.prefix, v) + addPrefix(t, n.prefix) BeeApp.Handlers.routers[k] = t } } @@ -245,6 +249,20 @@ func AddNamespace(nl ...*Namespace) { } } +func addPrefix(t *Tree, prefix string) { + for _, v := range t.fixrouters { + addPrefix(v, prefix) + } + if t.wildcard != nil { + addPrefix(t.wildcard, prefix) + } + if t.leaf != nil { + if c, ok := t.leaf.runObject.(*controllerInfo); ok { + c.pattern = prefix + c.pattern + } + } +} + // Namespace Condition func NSCond(cond namespaceCond) innnerNamespace { return func(ns *Namespace) {