A Controller is any type that embeds *revel.Controller (directly or indirectly).
Typically:
type AppController struct {
*revel.Controller
}
(*revel.Controller must be embedded as the first type in your struct)
The revel.Controller is the context for the request. It contains the request
and response data. Please refer to the godoc
for the full story, but here is the definition (along with definitions of helper types):
type Controller struct {
Name string // The controller name, e.g. "Application"
Type *ControllerType // A description of the controller type.
MethodType *MethodType // A description of the invoked action type.
AppController interface{} // The controller that was instantiated.
Request *Request
Response *Response
Result Result
Flash Flash // User cookie, cleared after 1 request.
Session Session // Session, stored in cookie, signed.
Params *Params // Parameters from URL and form (including multipart).
Args map[string]interface{} // Per-request scratch space.
RenderArgs map[string]interface{} // Args passed to the template.
Validation *Validation // Data validation helpers
}
// These provide a unified view of the request params.
// Includes:
// - URL query string
// - Form values
// - File uploads
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
}
As part of handling a HTTP request, Revel instantiates an instance of your
Controller, and it sets all of these properties on the embedded
revel.Controller. Therefore, Revel does not share Controller instances between
requests.