beego的Controller運行機(jī)制

2023-11-20 18:04 更新

controller 邏輯

前面我們了解了如何把用戶的請求分發(fā)到控制器,這小節(jié)我們就介紹大家如何來寫控制器,首先我們還是從源碼分析入手:

package controllers

import (
        "github.com/astaxie/beego"
)

type MainController struct {
        beego.Controller
}

func (this *MainController) Get() {
        this.Data["Website"] = "beego.me"
        this.Data["Email"] = "astaxie@gmail.com"
        this.TplName = "index.tpl"
}

上面的代碼顯示首先我們聲明了一個控制器 MainController,這個控制器里面內(nèi)嵌了 beego.Controller,這就是 Go 的嵌入方式,也就是 MainController 自動擁有了所有 beego.Controller 的方法。

而 beego.Controller 擁有很多方法,其中包括 Init、Prepare、Post、Get、Delete、Head 等方法。我們可以通過重寫的方式來實現(xiàn)這些方法,而我們上面的代碼就是重寫了 Get 方法。

我們先前介紹過 beego 是一個 RESTful 的框架,所以我們的請求默認(rèn)是執(zhí)行對應(yīng) req.Method 的方法。例如瀏覽器的是 GET 請求,那么默認(rèn)就會執(zhí)行 MainController 下的 Get 方法。這樣我們上面的 Get 方法就會被執(zhí)行到,這樣就進(jìn)入了我們的邏輯處理。(用戶可以改變這個行為,通過注冊自定義的函數(shù)名

里面的代碼是需要執(zhí)行的邏輯,這里只是簡單的輸出數(shù)據(jù),我們可以通過各種方式獲取數(shù)據(jù),然后賦值到 this.Data 中,這是一個用來存儲輸出數(shù)據(jù)的 map,可以賦值任意類型的值,這里我們只是簡單舉例輸出兩個字符串。

最后一個就是需要去渲染的模板,this.TplName 就是需要渲染的模板,這里指定了 index.tpl,如果用戶不設(shè)置該參數(shù),那么默認(rèn)會去到模板目錄的 Controller/<方法名>.tpl 查找,例如上面的方法會去 maincontroller/get.tpl (文件、文件夾必須小寫)。

用戶設(shè)置了模板之后系統(tǒng)會自動的調(diào)用 Render 函數(shù)(這個函數(shù)是在 beego.Controller 中實現(xiàn)的),所以無需用戶自己來調(diào)用渲染。

當(dāng)然也可以不使用模版,直接用 this.Ctx.WriteString 輸出字符串,如:

func (this *MainController) Get() {
        this.Ctx.WriteString("hello")
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號