From da6093a900d7114965a84e6aa7df853874025b7a Mon Sep 17 00:00:00 2001 From: john Date: Mon, 30 Jul 2018 21:01:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=9C=8D=E5=8A=A1=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E7=A4=BA=E4=BE=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/net/ghttp/ghttp_server_service.go | 24 ++++++++++++++--- geg/frame/mvc/controller/demo/buildin_vars.go | 22 ++++++++++++++++ geg/frame/mvc/controller/demo/product.go | 26 +++++++++++++++++++ geg/frame/mvc/controller/stats/stats1.go | 20 ++++++++++++++ geg/frame/mvc/controller/stats/stats2.go | 20 ++++++++++++++ geg/frame/mvc/main.go | 1 + 6 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 geg/frame/mvc/controller/demo/buildin_vars.go create mode 100644 geg/frame/mvc/controller/demo/product.go create mode 100644 geg/frame/mvc/controller/stats/stats1.go create mode 100644 geg/frame/mvc/controller/stats/stats2.go diff --git a/g/net/ghttp/ghttp_server_service.go b/g/net/ghttp/ghttp_server_service.go index 115154f4c..e55bfb529 100644 --- a/g/net/ghttp/ghttp_server_service.go +++ b/g/net/ghttp/ghttp_server_service.go @@ -97,7 +97,11 @@ func (s *Server)BindObject(pattern string, obj interface{}) error { } // 如果方法中带有Index方法,那么额外自动增加一个路由规则匹配主URI if strings.EqualFold(method, "Index") { - m[pattern] = &handlerItem { + p := key + if strings.EqualFold(p[len(p) - 6:], "/index") { + p = p[0 : len(p) - 6] + } + m[p] = &handlerItem { ctype : nil, fname : "", faddr : v.Method(i).Interface().(func(*Request)), @@ -128,7 +132,11 @@ func (s *Server)BindObjectMethod(pattern string, obj interface{}, methods string } // 如果方法中带有Index方法,那么额外自动增加一个路由规则匹配主URI if strings.EqualFold(mname, "Index") { - m[pattern] = &handlerItem { + p := key + if strings.EqualFold(p[len(p) - 6:], "/index") { + p = p[0 : len(p) - 6] + } + m[p] = &handlerItem { ctype : nil, fname : "", faddr : fval.Interface().(func(*Request)), @@ -181,7 +189,11 @@ func (s *Server)BindController(pattern string, c Controller) error { } // 如果方法中带有Index方法,那么额外自动增加一个路由规则匹配主URI if strings.EqualFold(mname, "Index") { - m[pattern] = &handlerItem { + p := key + if strings.EqualFold(p[len(p) - 6:], "/index") { + p = p[0 : len(p) - 6] + } + m[p] = &handlerItem { ctype : v.Elem().Type(), fname : mname, faddr : nil, @@ -212,7 +224,11 @@ func (s *Server)BindControllerMethod(pattern string, c Controller, methods strin } // 如果方法中带有Index方法,那么额外自动增加一个路由规则匹配主URI if strings.EqualFold(mname, "Index") { - m[pattern] = &handlerItem { + p := key + if strings.EqualFold(p[len(p) - 6:], "/index") { + p = p[0 : len(p) - 6] + } + m[p] = &handlerItem { ctype : t, fname : mname, faddr : nil, diff --git a/geg/frame/mvc/controller/demo/buildin_vars.go b/geg/frame/mvc/controller/demo/buildin_vars.go new file mode 100644 index 000000000..5f9130e4f --- /dev/null +++ b/geg/frame/mvc/controller/demo/buildin_vars.go @@ -0,0 +1,22 @@ +package demo + +import ( + "gitee.com/johng/gf/g" + "gitee.com/johng/gf/g/frame/gmvc" +) + +type Order struct { + gmvc.Controller +} + +func init() { + g.Server().BindController("/{.struct}/{.method}", &Order{}) +} + +func (o *Order) Index() { + o.Response.Write("Order Index") +} + +func (o *Order) List() { + o.Response.Write("Order List") +} diff --git a/geg/frame/mvc/controller/demo/product.go b/geg/frame/mvc/controller/demo/product.go new file mode 100644 index 000000000..45a317ea1 --- /dev/null +++ b/geg/frame/mvc/controller/demo/product.go @@ -0,0 +1,26 @@ +package demo + +import ( + "gitee.com/johng/gf/g" + "gitee.com/johng/gf/g/net/ghttp" + "gitee.com/johng/gf/g/util/gconv" +) + +type Product struct { + total int +} + +func init() { + p := &Product{} + g.Server().BindHandler("/product/total", p.Total) + g.Server().BindHandler("/product/list/{page}.html", p.List) +} + +func (p *Product) Total(r *ghttp.Request) { + p.total++ + r.Response.Write("total: ", gconv.String(p.total)) +} + +func (p *Product) List(r *ghttp.Request) { + r.Response.Write("page: ", r.Get("page")) +} diff --git a/geg/frame/mvc/controller/stats/stats1.go b/geg/frame/mvc/controller/stats/stats1.go new file mode 100644 index 000000000..bfd0034cb --- /dev/null +++ b/geg/frame/mvc/controller/stats/stats1.go @@ -0,0 +1,20 @@ +package stats + +import ( + "gitee.com/johng/gf/g" + "gitee.com/johng/gf/g/net/ghttp" + "gitee.com/johng/gf/g/util/gconv" +) + +var ( + total1 int +) + +func init() { + g.Server().BindHandler("/stats/total1", showTotal1) +} + +func showTotal1(r *ghttp.Request) { + total1++ + r.Response.Write("total:", gconv.String(total1)) +} diff --git a/geg/frame/mvc/controller/stats/stats2.go b/geg/frame/mvc/controller/stats/stats2.go new file mode 100644 index 000000000..d5be87acb --- /dev/null +++ b/geg/frame/mvc/controller/stats/stats2.go @@ -0,0 +1,20 @@ +package stats + +import ( + "gitee.com/johng/gf/g" + "gitee.com/johng/gf/g/net/ghttp" + "gitee.com/johng/gf/g/util/gconv" + "gitee.com/johng/gf/g/container/gtype" +) + +var ( + total2 = gtype.NewInt() +) + +func init() { + g.Server().BindHandler("/stats/total2", showTotal2) +} + +func showTotal2(r *ghttp.Request) { + r.Response.Write("total:", gconv.String(total2.Add(1))) +} diff --git a/geg/frame/mvc/main.go b/geg/frame/mvc/main.go index 0544de505..2aed9c843 100644 --- a/geg/frame/mvc/main.go +++ b/geg/frame/mvc/main.go @@ -3,6 +3,7 @@ package main import ( "gitee.com/johng/gf/g" _ "gitee.com/johng/gf/geg/frame/mvc/controller/demo" + _ "gitee.com/johng/gf/geg/frame/mvc/controller/stats" ) func main() {