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

相關文章
相關標籤/搜索