1
0
mirror of https://github.com/astaxie/beego.git synced 2024-11-22 11:10:57 +00:00

Add layout rebuilding on each request in dev mode

This commit is contained in:
saturn4er 2016-03-07 23:23:07 +02:00
parent f6f34306ee
commit 2c5ef8ccc8

View File

@ -34,14 +34,14 @@ import (
//commonly used mime-types //commonly used mime-types
const ( const (
applicationJSON = "application/json" applicationJSON = "application/json"
applicationXML = "application/xml" applicationXML = "application/xml"
textXML = "text/xml" textXML = "text/xml"
) )
var ( var (
// ErrAbort custom error when user stop request handler manually. // ErrAbort custom error when user stop request handler manually.
ErrAbort = errors.New("User stop run") ErrAbort = errors.New("User stop run")
// GlobalControllerRouter store comments with controller. pkgpath+controller:comments // GlobalControllerRouter store comments with controller. pkgpath+controller:comments
GlobalControllerRouter = make(map[string][]ControllerComments) GlobalControllerRouter = make(map[string][]ControllerComments)
) )
@ -56,31 +56,31 @@ type ControllerComments struct {
// Controller defines some basic http request handler operations, such as // Controller defines some basic http request handler operations, such as
// http context, template and view, session and xsrf. // http context, template and view, session and xsrf.
type Controller struct { type Controller struct {
// context data // context data
Ctx *context.Context Ctx *context.Context
Data map[interface{}]interface{} Data map[interface{}]interface{}
// route controller info // route controller info
controllerName string controllerName string
actionName string actionName string
methodMapping map[string]func() //method:routertree methodMapping map[string]func() //method:routertree
gotofunc string gotofunc string
AppController interface{} AppController interface{}
// template data // template data
TplName string TplName string
Layout string Layout string
LayoutSections map[string]string // the key is the section name and the value is the template name LayoutSections map[string]string // the key is the section name and the value is the template name
TplExt string TplExt string
EnableRender bool EnableRender bool
// xsrf data // xsrf data
_xsrfToken string _xsrfToken string
XSRFExpire int XSRFExpire int
EnableXSRF bool EnableXSRF bool
// session // session
CruSession session.Store CruSession session.Store
} }
// ControllerInterface is an interface to uniform all controller handler. // ControllerInterface is an interface to uniform all controller handler.
@ -230,12 +230,15 @@ func (c *Controller) renderTemplate() (bytes.Buffer, error) {
} }
if BConfig.RunMode == DEV { if BConfig.RunMode == DEV {
buildFiles := []string{c.TplName} buildFiles := []string{c.TplName}
if c.Layout != "" && c.LayoutSections != nil { if c.Layout != "" {
for _, sectionTpl := range c.LayoutSections { buildFiles = append(buildFiles, c.Layout)
if sectionTpl == "" { if c.LayoutSections != nil {
continue for _, sectionTpl := range c.LayoutSections {
if sectionTpl == "" {
continue
}
buildFiles = append(buildFiles, sectionTpl)
} }
buildFiles = append(buildFiles, sectionTpl)
} }
} }
BuildTemplate(BConfig.WebConfig.ViewsPath, buildFiles...) BuildTemplate(BConfig.WebConfig.ViewsPath, buildFiles...)
@ -281,7 +284,7 @@ func (c *Controller) URLFor(endpoint string, values ...interface{}) string {
return "" return ""
} }
if endpoint[0] == '.' { if endpoint[0] == '.' {
return URLFor(reflect.Indirect(reflect.ValueOf(c.AppController)).Type().Name()+endpoint, values...) return URLFor(reflect.Indirect(reflect.ValueOf(c.AppController)).Type().Name() + endpoint, values...)
} }
return URLFor(endpoint, values...) return URLFor(endpoint, values...)
} }
@ -289,7 +292,7 @@ func (c *Controller) URLFor(endpoint string, values ...interface{}) string {
// ServeJSON sends a json response with encoding charset. // ServeJSON sends a json response with encoding charset.
func (c *Controller) ServeJSON(encoding ...bool) { func (c *Controller) ServeJSON(encoding ...bool) {
var ( var (
hasIndent = true hasIndent = true
hasEncoding = false hasEncoding = false
) )
if BConfig.RunMode == PROD { if BConfig.RunMode == PROD {
@ -487,7 +490,7 @@ func (c *Controller) SaveToFile(fromfile, tofile string) error {
return err return err
} }
defer file.Close() defer file.Close()
f, err := os.OpenFile(tofile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) f, err := os.OpenFile(tofile, os.O_WRONLY | os.O_CREATE | os.O_TRUNC, 0666)
if err != nil { if err != nil {
return err return err
} }
@ -585,7 +588,7 @@ func (c *Controller) CheckXSRFCookie() bool {
// XSRFFormHTML writes an input field contains xsrf token value. // XSRFFormHTML writes an input field contains xsrf token value.
func (c *Controller) XSRFFormHTML() string { func (c *Controller) XSRFFormHTML() string {
return `<input type="hidden" name="_xsrf" value="` + return `<input type="hidden" name="_xsrf" value="` +
c.XSRFToken() + `" />` c.XSRFToken() + `" />`
} }
// GetControllerAndAction gets the executing controller name and action name. // GetControllerAndAction gets the executing controller name and action name.