Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
张磊
/
FileStorageBeego
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
d57557dc
authored
2014-01-01 17:57:57 +0800
by
astaxie
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
add AutoRouterWithPrefix
1 parent
803d91c0
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
75 additions
and
4 deletions
app.go
beego.go
router.go
router_test.go
app.go
View file @
d57557d
...
...
@@ -118,6 +118,14 @@ func (app *App) AutoRouter(c ControllerInterface) *App {
return
app
}
// AutoRouterWithPrefix adds beego-defined controller handler with prefix.
// if beego.AutoPrefix("/admin",&MainContorlller{}) and MainController has methods List and Page,
// visit the url /admin/main/list to exec List function or /admin/main/page to exec Page function.
func
(
app
*
App
)
AutoRouterWithPrefix
(
prefix
string
,
c
ControllerInterface
)
*
App
{
app
.
Handlers
.
AddAutoPrefix
(
prefix
,
c
)
return
app
}
// UrlFor creates a url with another registered controller handler with params.
// The endpoint is formed as path.controller.name to defined the controller method which will run.
// The values need key-pair data to assign into controller method.
...
...
beego.go
View file @
d57557d
...
...
@@ -50,6 +50,15 @@ func (gr GroupRouters) AddRouter(pattern string, c ControllerInterface, mappingM
gr
=
append
(
gr
,
newRG
)
}
func
(
gr
GroupRouters
)
AddAuto
(
c
ControllerInterface
)
{
newRG
:=
groupRouter
{
""
,
c
,
""
,
}
gr
=
append
(
gr
,
newRG
)
}
// AddGroupRouter with the prefix
// it will register the router in BeeApp
// the follow code is write in modules:
...
...
@@ -62,7 +71,9 @@ func (gr GroupRouters) AddRouter(pattern string, c ControllerInterface, mappingM
// AddRouterGroup("/admin", auth.GR)
func
AddGroupRouter
(
prefix
string
,
groups
GroupRouters
)
*
App
{
for
_
,
v
:=
range
groups
{
if
v
.
mappingMethods
!=
""
{
if
v
.
pattern
==
""
{
BeeApp
.
AutoRouterWithPrefix
(
prefix
,
v
.
controller
)
}
else
if
v
.
mappingMethods
!=
""
{
BeeApp
.
Router
(
prefix
+
v
.
pattern
,
v
.
controller
,
v
.
mappingMethods
)
}
else
{
BeeApp
.
Router
(
prefix
+
v
.
pattern
,
v
.
controller
)
...
...
@@ -95,6 +106,13 @@ func AutoRouter(c ControllerInterface) *App {
return
BeeApp
}
// AutoPrefix adds controller handler to BeeApp with prefix.
// it's same to App.AutoRouterWithPrefix.
func
AutoPrefix
(
prefix
string
,
c
ControllerInterface
)
*
App
{
BeeApp
.
AutoRouterWithPrefix
(
prefix
,
c
)
return
BeeApp
}
// ErrorHandler registers http.HandlerFunc to each http err code string.
// usage:
// beego.ErrorHandler("404",NotFound)
...
...
router.go
View file @
d57557d
...
...
@@ -33,6 +33,14 @@ const (
var
(
// supported http methods.
HTTPMETHOD
=
[]
string
{
"get"
,
"post"
,
"put"
,
"delete"
,
"patch"
,
"options"
,
"head"
}
// these beego.Controller's methods shouldn't reflect to AutoRouter
exceptMethod
=
[]
string
{
"Init"
,
"Prepare"
,
"Finish"
,
"Render"
,
"RenderString"
,
"RenderBytes"
,
"Redirect"
,
"Abort"
,
"StopRun"
,
"UrlFor"
,
"ServeJson"
,
"ServeJsonp"
,
"ServeXml"
,
"Input"
,
"ParseForm"
,
"GetString"
,
"GetStrings"
,
"GetInt"
,
"GetBool"
,
"GetFloat"
,
"GetFile"
,
"SaveToFile"
,
"StartSession"
,
"SetSession"
,
"GetSession"
,
"DelSession"
,
"SessionRegenerateID"
,
"DestroySession"
,
"IsAjax"
,
"GetSecureCookie"
,
"SetSecureCookie"
,
"XsrfToken"
,
"CheckXsrfCookie"
,
"XsrfFormHtml"
,
"GetControllerAndAction"
}
)
type
controllerInfo
struct
{
...
...
@@ -221,8 +229,8 @@ func (p *ControllerRegistor) Add(pattern string, c ControllerInterface, mappingM
// Add auto router to ControllerRegistor.
// example beego.AddAuto(&MainContorlller{}),
// MainController has method List and Page.
// visit the url /main/list to exec List function
// /main/page to exec Page function.
// visit the url /main/list to exec
ute
List function
// /main/page to exec
ute
Page function.
func
(
p
*
ControllerRegistor
)
AddAuto
(
c
ControllerInterface
)
{
p
.
enableAuto
=
true
reflectVal
:=
reflect
.
ValueOf
(
c
)
...
...
@@ -235,7 +243,32 @@ func (p *ControllerRegistor) AddAuto(c ControllerInterface) {
p
.
autoRouter
[
firstParam
]
=
make
(
map
[
string
]
reflect
.
Type
)
}
for
i
:=
0
;
i
<
rt
.
NumMethod
();
i
++
{
p
.
autoRouter
[
firstParam
][
rt
.
Method
(
i
)
.
Name
]
=
ct
if
!
utils
.
InSlice
(
rt
.
Method
(
i
)
.
Name
,
exceptMethod
)
{
p
.
autoRouter
[
firstParam
][
rt
.
Method
(
i
)
.
Name
]
=
ct
}
}
}
// Add auto router to ControllerRegistor with prefix.
// example beego.AddAutoPrefix("/admin",&MainContorlller{}),
// MainController has method List and Page.
// visit the url /admin/main/list to execute List function
// /admin/main/page to execute Page function.
func
(
p
*
ControllerRegistor
)
AddAutoPrefix
(
prefix
string
,
c
ControllerInterface
)
{
p
.
enableAuto
=
true
reflectVal
:=
reflect
.
ValueOf
(
c
)
rt
:=
reflectVal
.
Type
()
ct
:=
reflect
.
Indirect
(
reflectVal
)
.
Type
()
firstParam
:=
strings
.
Trim
(
prefix
,
"/"
)
+
"/"
+
strings
.
ToLower
(
strings
.
TrimSuffix
(
ct
.
Name
(),
"Controller"
))
if
_
,
ok
:=
p
.
autoRouter
[
firstParam
];
ok
{
return
}
else
{
p
.
autoRouter
[
firstParam
]
=
make
(
map
[
string
]
reflect
.
Type
)
}
for
i
:=
0
;
i
<
rt
.
NumMethod
();
i
++
{
if
!
utils
.
InSlice
(
rt
.
Method
(
i
)
.
Name
,
exceptMethod
)
{
p
.
autoRouter
[
firstParam
][
rt
.
Method
(
i
)
.
Name
]
=
ct
}
}
}
...
...
router_test.go
View file @
d57557d
...
...
@@ -198,3 +198,15 @@ func TestPrepare(t *testing.T) {
t
.
Errorf
(
w
.
Body
.
String
()
+
"user define func can't run"
)
}
}
func
TestAutoPrefix
(
t
*
testing
.
T
)
{
r
,
_
:=
http
.
NewRequest
(
"GET"
,
"/admin/test/list"
,
nil
)
w
:=
httptest
.
NewRecorder
()
handler
:=
NewControllerRegistor
()
handler
.
AddAutoPrefix
(
"/admin"
,
&
TestController
{})
handler
.
ServeHTTP
(
w
,
r
)
if
w
.
Body
.
String
()
!=
"i am list"
{
t
.
Errorf
(
"TestAutoPrefix can't run"
)
}
}
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment