在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
返回值必须返回一个 rev.Result, 它处理response的生成并依附于一个简单的接口: type Result interface { Apply(req *Request, resp *Response) }
此外,开发人员可以定义他们自己的rev.Result并返回它. 设置状态码 / Content Type每一个内建的结果都有一个默认的状态码和Content Type. 要重写它们的值只需在response时简单的设置那些要改变的属性: func (c Application) Action() rev.Result { c.Response.Status = http.StatusTeapot c.Response.ContentType = "application/dishware" return c.Render() } 渲染render在action中被调用,
如果不成功(例如它不能找到模板文件), 它将返回一个ErrorResult替换. 允许开发人员这样写: func (c MyApp) Action() rev.Result { myValue := calculateValue() return c.Render(myValue) } 在他们的模板中使用"myValue". 这通常比显式的构造一个字典更方便, 因为在很多的案例中数据将需要作为本地变量来处理. 注意:Revel通过调用的方法名称来决定模板路径和查找的参数名称.因此, c.Render()可能只能从action中调用. RenderJson / RenderXml应用程序可以调用 如果results.pretty=true在app.conf中, 序列化将使用 Redirect一个帮助函数提供了重定向. 它可以被用于两种方式. 1. 重定向一个不带参数的Action return c.Redirect(Hotels.Settings) 这种形式对提供一个深度的类型安全和独立的路由很有帮助.(它生成自动的URL) 2. 重定向到一个格式化字符串 return c.Redirect("/hotels/%d/settings", hotelId) 这种形式需要必要的参数传递. 它返回一个302(临时跳转)状态码. 添加你自己的Result下面是一个添加简单Result的示例. 创建类型: type Html string func (r Html) Apply(req *Request, resp *Response) { resp.WriteHeader(http.StatusOK, "text/html") resp.Out.Write([]byte(r)) } 然后在action中使用它 func (c *Application) Action() rev.Result { return Html("<html><body>Hello World</body></html>") } 状态码每一个Result将默认设置一个状态码.你能通过设置一个你自己的来重写这个默认的状态码. func (c *Application) CreateEntity() rev.Result { c.Response.Status = 201 return c.Render() }
至此结束. |
请发表评论