// URLFor does another controller handler in this request function. // it can access any controller method. func (p *ControllerRegister) URLFor(endpoint string, values ...interface{}) string { paths := strings.Split(endpoint, ".") if len(paths) <= 1 { logs.Warn("urlfor endpoint must like path.controller.method") return "" } if len(values)%2 != 0 { logs.Warn("urlfor params must key-value pair") return "" } params := make(map[string]string) if len(values) > 0 { key := "" for k, v := range values { if k%2 == 0 { key = fmt.Sprint(v) } else { params[key] = fmt.Sprint(v) } } } controllName := strings.Join(paths[:len(paths)-1], "/") methodName := paths[len(paths)-1] for m, t := range p.routers { ok, url := p.geturl(t, "/", controllName, methodName, params, m) if ok { return url } } return "" }
func registerTemplate() error { if err := BuildTemplate(BConfig.WebConfig.ViewsPath); err != nil { if BConfig.RunMode == DEV { logs.Warn(err) } return err } return nil }
func serverStaticRouter(ctx *context.Context) { if ctx.Input.Method() != "GET" && ctx.Input.Method() != "HEAD" { return } forbidden, filePath, fileInfo, err := lookupFile(ctx) if err == errNotStaticRequest { return } if forbidden { exception("403", ctx) return } if filePath == "" || fileInfo == nil { if BConfig.RunMode == DEV { logs.Warn("Can't find/open the file:", filePath, err) } http.NotFound(ctx.ResponseWriter, ctx.Request) return } if fileInfo.IsDir() { requestURL := ctx.Input.URL() if requestURL[len(requestURL)-1] != '/' { redirectURL := requestURL + "/" if ctx.Request.URL.RawQuery != "" { redirectURL = redirectURL + "?" + ctx.Request.URL.RawQuery } ctx.Redirect(302, redirectURL) } else { //serveFile will list dir http.ServeFile(ctx.ResponseWriter, ctx.Request, filePath) } return } var enableCompress = BConfig.EnableGzip && isStaticCompress(filePath) var acceptEncoding string if enableCompress { acceptEncoding = context.ParseEncoding(ctx.Request) } b, n, sch, err := openFile(filePath, fileInfo, acceptEncoding) if err != nil { if BConfig.RunMode == DEV { logs.Warn("Can't compress the file:", filePath, err) } http.NotFound(ctx.ResponseWriter, ctx.Request) return } if b { ctx.Output.Header("Content-Encoding", n) } else { ctx.Output.Header("Content-Length", strconv.FormatInt(sch.size, 10)) } http.ServeContent(ctx.ResponseWriter, ctx.Request, filePath, sch.modTime, sch) return }
// Warn compatibility alias for Warning() func Warn(v ...interface{}) { logs.Warn(generateFmtStr(len(v)), v...) }