beego——URL构建

若是能够匹配URl,那么beego也能够生成URL吗?固然能够。api

UrlFor()函数就是用于构建执行函数的URL的。它把对应控制器和函数名结合的字符串做为第一个参数,其他参数对应URL中的变量。未知变量将添加到URL中做为查询参数。函数

下面定义了一个相应的控制器this

type TestController struct {
    beego.Controller
}

func (this *TestController) Get() {
    this.Data["Username"] = "astaxie"
    this.Ctx.Output.Body([]byte("ok"))
}

func (this *TestController) List() {
    this.Ctx.Output.Body([]byte("i am list"))
}

func (this *TestController) Params() {
    this.Ctx.Output.Body([]byte(this.Ctx.Input.Params()["0"] + this.Ctx.Input.Params()["1"] + this.Ctx.Input.Params()["2"]))
}

func (this *TestController) Myext() {
    this.Ctx.Output.Body([]byte(this.Ctx.Input.Param(":ext")))
}

func (this *TestController) GetUrl() {
    this.Ctx.Output.Body([]byte(this.UrlFor(".Myext")))
}

  

下面是咱们注册的路由:编码

beego.Router("/api/list", &TestController{}, "*:List")
beego.Router("/person/:last/:first", &TestController{})
beego.AutoRouter(&TestController{})

  

那么经过方式能够获取相应的URL地址:url

beego.URLFor("TestController.List")
// 输出 /api/list

beego.URLFor("TestController.Get", ":last", "xie", ":first", "asta")
// 输出 /person/xie/asta

beego.URLFor("TestController.Myext")
// 输出 /Test/Myext

beego.URLFor("TestController.GetUrl")
// 输出 /Test/GetUrl

  

模板中如何使用code

默认状况下,beego已经注册了urlfor函数,用户能够经过以下的代码进行调用blog

{{urlfor "TestController.List"}}

  

为何不把URL写死在模板中,反而要动态构建?有两个很好的理由:路由

(1)反向解析一般比硬编码URL更直观。同时,更重要的是你能够只在一个地方改变URL,而不用处处找。字符串

(2)URL建立会为你处理特殊字符的转义和Unicode数据。ast

相关文章
相关标签/搜索