From 762e2c8deaadf027c4766c188718b8dcb39bf2a8 Mon Sep 17 00:00:00 2001 From: John Date: Sun, 31 Dec 2017 23:44:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=A4=BA=E4=BE=8B=EF=BC=8C?= =?UTF-8?q?=E6=94=B9=E8=BF=9Bghttp=E6=8E=A7=E5=88=B6=E5=99=A8=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E6=B3=A8=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/net/ghttp/http_server.go | 11 ++++++-- g/net/ghttp/http_server_domain.go | 8 ++++-- geg/frame/mvc/controller/demo/hello.go | 5 +--- geg/frame/mvc/controller/demo/method.go | 29 ++++++++++++++++++++ geg/frame/mvc/controller/demo/object.go | 14 ++++++++++ geg/frame/mvc/controller/demo/object_rest.go | 15 ++++++++++ geg/frame/mvc/controller/demo/rest.go | 3 +- geg/frame/mvc/controller/demo/test.go | 25 ----------------- geg/frame/mvc/controller/demo/user.go | 8 ++++-- 9 files changed, 80 insertions(+), 38 deletions(-) create mode 100644 geg/frame/mvc/controller/demo/method.go create mode 100644 geg/frame/mvc/controller/demo/object.go create mode 100644 geg/frame/mvc/controller/demo/object_rest.go delete mode 100644 geg/frame/mvc/controller/demo/test.go diff --git a/g/net/ghttp/http_server.go b/g/net/ghttp/http_server.go index c7ef11141..ac30c8631 100644 --- a/g/net/ghttp/http_server.go +++ b/g/net/ghttp/http_server.go @@ -425,6 +425,13 @@ func (s *Server)BindControllerRest(pattern string, c Controller) error { // 绑定控制器方法,pattern支持http method // pattern的格式形如:/user/list, put:/user, delete:/user // 这种方式绑定的控制器每一次请求都会初始化一个新的控制器对象进行处理,对应不同的请求会话 -func (s *Server)BindControllerMethod(pattern string, c Controller, method string) error { - return s.bindHandlerItem(pattern, HandlerItem{reflect.ValueOf(c).Elem().Type(), method, nil}) +// 第三个参数methods支持多个方法注册,多个方法以英文“,”号分隔 +func (s *Server)BindControllerMethod(pattern string, c Controller, methods string) error { + for _, method := range strings.Split(methods, ",") { + item := HandlerItem{reflect.ValueOf(c).Elem().Type(), strings.TrimSpace(method), nil} + if err := s.bindHandlerItem(pattern, item); err != nil { + return err + } + } + return nil } diff --git a/g/net/ghttp/http_server_domain.go b/g/net/ghttp/http_server_domain.go index 493f20dc1..cdbfd5428 100644 --- a/g/net/ghttp/http_server_domain.go +++ b/g/net/ghttp/http_server_domain.go @@ -91,10 +91,12 @@ func (d *Domain) BindControllerRest(pattern string, c Controller) error { } // 绑定控制器方法 -func (d *Domain) BindControllerMethod(pattern string, c Controller, method string) error { +func (d *Domain) BindControllerMethod(pattern string, c Controller, methods string) error { for domain, _ := range d.m { - if err := d.s.BindControllerMethod(pattern + "@" + domain, c, method); err != nil { - return err + for _, method := range strings.Split(methods, ",") { + if err := d.s.BindControllerMethod(pattern + "@" + domain, c, strings.TrimSpace(method)); err != nil { + return err + } } } return nil diff --git a/geg/frame/mvc/controller/demo/hello.go b/geg/frame/mvc/controller/demo/hello.go index 32848b486..7d0f71389 100644 --- a/geg/frame/mvc/controller/demo/hello.go +++ b/geg/frame/mvc/controller/demo/hello.go @@ -1,9 +1,6 @@ package demo -import ( - "gitee.com/johng/gf/g/net/ghttp" -) - +import "gitee.com/johng/gf/g/net/ghttp" // 初始化控制器对象,并绑定操作到Web Server func init() { diff --git a/geg/frame/mvc/controller/demo/method.go b/geg/frame/mvc/controller/demo/method.go new file mode 100644 index 000000000..393261a24 --- /dev/null +++ b/geg/frame/mvc/controller/demo/method.go @@ -0,0 +1,29 @@ +package demo + +import ( + "gitee.com/johng/gf/g/net/ghttp" + "gitee.com/johng/gf/g/frame/gmvc" +) + +type ControllerMethod struct { + gmvc.Controller +} + +func init() { + ghttp.GetServer().BindControllerMethod("/method", &ControllerMethod{}, "Name, Age") +} + +func (c *ControllerMethod) Name() { + c.Response.WriteString("John") +} + +func (c *ControllerMethod) Age() { + c.Response.WriteString("18") +} + +func (c *ControllerMethod) Info() { + c.Response.WriteString("Info") +} + + + diff --git a/geg/frame/mvc/controller/demo/object.go b/geg/frame/mvc/controller/demo/object.go new file mode 100644 index 000000000..cd347377d --- /dev/null +++ b/geg/frame/mvc/controller/demo/object.go @@ -0,0 +1,14 @@ +package demo + +import "gitee.com/johng/gf/g/net/ghttp" + +type Object struct {} + +func init() { + ghttp.GetServer().BindObject("/object", &Object{}) +} + +func (o *Object) Show(s *ghttp.Server, r *ghttp.ClientRequest, w *ghttp.ServerResponse) { + w.WriteString("It's show time bibi!") +} + diff --git a/geg/frame/mvc/controller/demo/object_rest.go b/geg/frame/mvc/controller/demo/object_rest.go new file mode 100644 index 000000000..73db4424c --- /dev/null +++ b/geg/frame/mvc/controller/demo/object_rest.go @@ -0,0 +1,15 @@ +package demo + +import "gitee.com/johng/gf/g/net/ghttp" + +// 测试绑定对象 +type ObjectRest struct {} + +func init() { + ghttp.GetServer().BindObjectRest("/object-rest", &ObjectRest{}) +} + +func (o *ObjectRest) Get(s *ghttp.Server, r *ghttp.ClientRequest, w *ghttp.ServerResponse) { + w.WriteString("It's show time bibi!") +} + diff --git a/geg/frame/mvc/controller/demo/rest.go b/geg/frame/mvc/controller/demo/rest.go index d668a0f8e..2cf748fdc 100644 --- a/geg/frame/mvc/controller/demo/rest.go +++ b/geg/frame/mvc/controller/demo/rest.go @@ -1,9 +1,8 @@ package demo import ( - "gitee.com/johng/gf/g/frame/gmvc" - "gitee.com/johng/gf/g/net/ghttp" + "gitee.com/johng/gf/g/frame/gmvc" ) // 测试控制器 diff --git a/geg/frame/mvc/controller/demo/test.go b/geg/frame/mvc/controller/demo/test.go deleted file mode 100644 index 037baca85..000000000 --- a/geg/frame/mvc/controller/demo/test.go +++ /dev/null @@ -1,25 +0,0 @@ -package demo - -import ( - - "gitee.com/johng/gf/g/net/ghttp" -) - -// 测试绑定对象 -type T struct {} - -// 初始化控制器对象,并绑定操作到Web Server -func init() { - // 绑定对象,对象中的公开方法将会自动绑定到指定的URI末尾 - // ghttp.GetServer().BindObject("/test", &T{}) - // 只有localhost域名下才能访问该对象, - // 对应URL为:http://localhost:8199/test/show - // 通过该地址将无法访问到内容:http://127.0.0.1:8199/test/show - ghttp.GetServer().Domain("localhost").BindObject("/test", &T{}) -} - -// 用于对象映射 -func (t *T) Show(s *ghttp.Server, r *ghttp.ClientRequest, w *ghttp.ServerResponse) { - w.WriteString("It's show time bibi!") -} - diff --git a/geg/frame/mvc/controller/demo/user.go b/geg/frame/mvc/controller/demo/user.go index d92a025b0..9d2233591 100644 --- a/geg/frame/mvc/controller/demo/user.go +++ b/geg/frame/mvc/controller/demo/user.go @@ -1,9 +1,8 @@ package demo import ( - - "gitee.com/johng/gf/g/frame/gmvc" "gitee.com/johng/gf/g/net/ghttp" + "gitee.com/johng/gf/g/frame/gmvc" ) // 定义业务相关的控制器对象, @@ -19,6 +18,11 @@ func init() { ghttp.GetServer().BindController("/user", &ControllerUser{}) } +// 定义操作逻辑 - 展示姓名 +func (c *ControllerUser) Name() { + c.Response.WriteString("John") +} + // 定义操作逻辑 - 展示模板 func (c *ControllerUser) Info() { c.View.Assign("name", "john")