Revel 路由routes


当前第2页 返回上一页

对于静态资源服务, Revel 有static 模块支持, 包含一个单一的带两个参数的静态 控制器

  • 前缀 (字符串) - 指定到静态文件根目录的相对或绝对路径
  • 文件路径 (字符串) - 指定文件的相对路径。

(可以参考 代码结构布局图 了解更多信息)

固定参数

路由可以绑定一个或多个参数到控制器方法中,举个栗子:

GET    /products/:id     ShowList("PRODUCT")
GET    /menus/:id        ShowList("MENU")

参数通过在路由中的位置绑定到参数名,这里,列表中的字符串将被绑定到方法的第一个参数中。

下面是几种有用的情况:

  • 一组相似功能的方法
  • 相同功能的方法,但工作在不同的模式
  • 相同功能的方法,但操作不同的数据类型

自动路由

POST   /hotels/:id/:action    Hotels.:action
  • /:controller/:action :controller.:action

URL 的提取也可以用于确定调用哪个控制器方法。匹配规则不区分大小写

第一个例子匹配下面的路由

/hotels/1/show    => Hotels.Show
/hotels/2/details => Hotels.Details

第二个例子匹配应用程序中的任意的方法

/app/login         => App.Login
/users/list        => Users.List

由于匹配控制器和方法不区分大小写,下面的路由也匹配

/APP/LOGIN         => App.Login
/Users/List        => Users.List

使用自动路由作为一个捕获所有的方法(例如文件中的最后一个路由),用于快速挂接方法,to non-vanity URLs,尤其是在与反向路由器一起使用是很有用的。

反转路由

对于以下几种情况,使用反转路由生成URLs是一个很好的方法,

  • 避免拼写错误
  • 编译器确保反向路由有正确的数量和参数类型。
  • 修改路由,仅需要在routes文件中修改一次

构建程序时,Revel自动生成一个路由包app/routes,一条语句就可以使用:

routes.Controller.Action(param1, param2)

上面的语句使用Controller.Action和参数返回一个字符串类型的 URL,下面给出一个完整的例子:

import (
    "github.com/revel/revel"
    "project/app/routes"
)

type App struct { *revel.Controller }

// 生成一个表单页面
func (c App) ViewForm(username string) revel.Result {
    return c.Render(username)
}

// 处理提交的表单
func (c App) ProcessForm(username, input string) revel.Result {
    ...
    if c.Validation.HasErrors() {
        c.Validation.Keep()
        c.Flash.Error("Form invalid. Try again.")
        return c.Redirect(routes.App.ViewForm(username))  // <--- 反转路由
    }
    c.Flash.Success("Form processed!")
    return c.Redirect(routes.App.ViewConfirmation(username, input))  // <--- 反转路由
}

局限性: Only primitive parameters to a route are typed due to the possibility of circular imports. Non-primitive parameters are typed as interface{}.


标签:Revel

返回前面的内容

相关阅读 >>

Revel 配置文件app.conf

Revel 介绍

Revel 缓存cache

Revel 参数验证

Revel websockets

Revel results

Revel 概念

Revel session flash

Revel 过滤器

Revel 命令行工具

更多相关阅读请进入《Revel》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...