本文整理自网络,侵删。
路由定义在一个单独的 routes
文件中.
路由定义规则是:
(METHOD) (URL Pattern) (Controller.Action)
下面演示路由的定义:
# conf/routes
# 这个文件定义了应用程序的所有路由 (优先级按照先后顺序)
GET /login App.Login # 一个简单的路由
GET /hotels/ Hotels.Index # 一个简单的路由,带不带斜线后缀都一样
GET /hotels/:id Hotels.Show # 绑定到一个URI参数id
WS /hotels/:id/feed Hotels.Feed # WebSockets
POST /hotels/:id/:action Hotels.:action # 自动匹配路由到一个控制器的多个方法
GET /public/*filepath Static.Serve("public") # 映射到 /public/下的静态文件
- /:controller/:action :controller.:action # 捕获所有控制器方法; 自动生成 URL
接下来我们一个个看。最后在看看如何实现 反转路由 – 生成URL调用一个特定的方法
一个简单的路由
GET /login App.Login
直接将一个URL精确匹配到一个控制器方法。
斜线后缀
GET /hotels/ Hotels.Index
/hotels
和 /hotels/
路由都会调用 Hotels.Index
方法。反转 Hotels.Index
产生的URL则会包含斜线后缀。
斜线后缀无法用于区分两个同名路由,/login
和 /login/
是一样的
URL 参数
GET /hotels/:id Hotels.Show
Revel可以从URL重提取参数并绑定到控制器方法。:id
变量会尝试匹配除了斜线后缀外的任意值。举个栗子,/hotels/123
和 /hotels/abc
都与这个路由匹配。
提取的参数保存到 Controller.Params
map中, 绑定到控制器方法Show中. 举个栗子:
func (c Hotels) Show(id int) revel.Result {
...
}
或
func (c Hotels) Show() revel.Result {
var id string = c.Params.Get("id")
...
}
或
func (c Hotels) Show() revel.Result {
var id int
c.Params.Bind(&id, "id")
...
}
通配符
GET /public/*filepath Static.Serve("public")
路由器识别第二种通配符 。通配符必须放到路由的最后一个元素前, 匹配所有以*之前路径开头的URL
这里的路由将匹配 “/public/”和以他开头的所有路径
Websockets
WS /hotels/:id/feed Hotels.Feed
Websockets 以同样的方式接受请求, 它使用 WS标识符
相应的方法签名如下:
func (c Hotels) Feed(ws *websocket.Conn, id int) revel.Result {
...
}
静态文件服务
GET /public/*filepath Static.Serve("public")
GET /favicon.ico Static.Serve("public","img/favicon.png")
对于使用2个参数的Static.Serve, 在 ” 和 , 之间不允许有空格,due to how encoding/csv works.
相关阅读 >>
更多相关阅读请进入《Revel》频道 >>

Go语言101
一个与时俱进的Go编程知识库。