自定义**Controller** 是一个直接或间接嵌入了 `*revel.Controller` 的struct。
典型用法:
~~~
type AppController struct {
*revel.Controller
}
~~~
`*revel.Controller` 在你自定义的struct中必须是第一个嵌入的类型
`revel.Controller` 用于请求的上下文,包含了请求与响应数据,请到 [the godoc](http://gorevel.cn/docs/docs/godoc/controller.html) 查看完整内容, 下面是一个定义 (以及辅助类型的定义):
~~~
type Controller struct {
Name string // 控制器名称, 比如: "Application"
Type *ControllerType // 控制器类型描述
MethodType *MethodType // 控制器方法描述
AppController interface{} // 控制器实例
Request *Request
Response *Response
Result Result
Flash Flash // 用户 cookie, 在请求之后清空
Session Session // Session, 保存在cookie中,签名。
Params *Params // URL和表单中的参数(包扩 multipart).
Args map[string]interface{} // 每个请求的暂存空间
RenderArgs map[string]interface{} // 传递给模板的参数
Validation *Validation // 数据验证帮助器
}
// 统一的请求参数包装
// 包括:
// - URL 查询字符串
// - Form 表单字段
// - File 文件上传
type Params struct {
url.Values
Files map[string][]*multipart.FileHeader
}
type Request struct {
*http.Request
ContentType string
}
type Response struct {
Status int
ContentType string
Headers http.Header
Cookies []*http.Cookie
Out http.ResponseWriter
}
~~~
作为HTTP请求处理的一部分,Revel实例化一个控制器,设置所有`revel.Controller`嵌入的属性, 因此, Revel 不在请求之间共享实例,对于每个请求的处理,控制器都是独立的。