-
Notifications
You must be signed in to change notification settings - Fork 1
Controller定义
extrame edited this page Nov 13, 2014
·
14 revisions
一个Controller有三个基本属性需要定义,定义的方式采用特定结构体成员+注释的形式完成,例如:
type Controller struct {
goblet.Route `/t`
goblet.Render `html=template`
goblet.Layout `detail`
goblet.RestController
}
- 第一个特定结构体成员是goblet.Route匿名变量,他的注释是一个url path,标明这个router的url路径
- 第二个特定结构体成员是goblet.Render匿名变量,他的注释是一个标明该controller可以使用哪些渲染方式的选项,关于渲染方式的选项具体定义方式,参见渲染方式
- 第三个特定结构体成员是goblet.Layout匿名变量,他的注释是一个标明该controller使用哪个layout模板的模板名称
- 第四个特定结构体成员用于标明Controller的类型,分别可以用以下三个匿名变量来对应下诉三种Controller
- goblet.SingleController
- goblet.RestController
- goblet.GroupController
以上四种成员变量都不是必须指定的,默认规则如下:
- url默认指向Controller同名路径(区分大小写)
- render默认指向渲染模板路径下的同名路径(区分大小写)
- Layout默认使用“default”模板
- Controller类型如果没有指定,首先检查是否实现Get或者Post函数,判定是否是SingleController;再看是否实现了RestController的相关函数,判定是否是SingleController;最次判定为GroupController
一共有三种类型的Controller:
- SingleController
- RestController
- GroupController
SingleController指向一个单独的url节点,定义方式是在Controller里面实现以下函数的一个或者多个
- Get(cx *Context)函数
或者
- Post(cx *Context)函数
注意
SingleController的goblet.Render指向一个具体的渲染模板文件
Get函数指向该Controller的Get方法
Get函数指向该Controller的Post方法
RestController指向一个满足类似ROR的Rest Controller定义的url节点,定义方式是在Controller里面实现以下函数的一个或者多个
- Read(string, *Context)函数
或者
- ReadMany(cx *Context)函数
或者
- New(cx *Context)函数
或者
- UpdateMany(*Context)函数
或者
- Create(cx *Context)函数
Read函数指向该Controller的Read方法
- URL:controller/id.html,url path的最后一个部分会被作为id传入函数
- HTTP方法:GET
ReadMany函数指向该Controller的ReadMany方法
- URL:controller.html
- HTTP方法:GET
New函数指向该Controller的New方法
- URL:controller/new.html
- HTTP方法:GET
UpdateMany函数指向该Controller的UpdateMany方法
- URL:controller.html
- HTTP方法:PUT
UpdateMany函数指向该Controller的DeleteMany方法
- URL:controller.html
- HTTP方法:DELETE
Create函数指向该Controller的Create方法
- URL:controller.html
- HTTP方法:POST
GroupController指向一个url节点,该节点使用一个目录作为渲染的根目录,并根据url调取具体的函数,例如示例所示的Controller,如果实现Test函数,则将url中/controller/test指向该函数