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.