# controller 邏輯
前面我們了解了如何把用戶的請求分發到控制器,這小節我們就介紹大家如何來寫控制器,首先我們還是從源碼分析入手:
```
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`,這個控制器里面內嵌了 `beego.Controller`,這就是 Go 的嵌入方式,也就是 `MainController` 自動擁有了所有 `beego.Controller` 的方法。
而 `beego.Controller` 擁有很多方法,其中包括 `Init`、`Prepare`、`Post`、`Get`、`Delete`、`Head` 等方法。我們可以通過重寫的方式來實現這些方法,而我們上面的代碼就是重寫了 `Get` 方法。
我們先前介紹過 beego 是一個 RESTful 的框架,所以我們的請求默認是執行對應 `req.Method` 的方法。例如瀏覽器的是 `GET` 請求,那么默認就會執行 `MainController` 下的 `Get` 方法。這樣我們上面的 Get 方法就會被執行到,這樣就進入了我們的邏輯處理。(用戶可以改變這個行為,通過注冊自定義的函數名,更加詳細的請參考[路由設置](../mvc/controller/router.md))
里面的代碼是需要執行的邏輯,這里只是簡單的輸出數據,我們可以通過各種方式獲取數據,然后賦值到 `this.Data` 中,這是一個用來存儲輸出數據的 map,可以賦值任意類型的值,這里我們只是簡單舉例輸出兩個字符串。
最后一個就是需要去渲染的模板,`this.TplName` 就是需要渲染的模板,這里指定了 `index.tpl`,如果用戶不設置該參數,那么默認會去到模板目錄的 `Controller/<方法名>.tpl` 查找,例如上面的方法會去 `maincontroller/get.tpl` ***(文件、文件夾必須小寫)***。
用戶設置了模板之后系統會自動的調用 `Render` 函數(這個函數是在 beego.Controller 中實現的),所以無需用戶自己來調用渲染。
當然也可以不使用模版,直接用 `this.Ctx.WriteString` 輸出字符串,如:
```
func (this *MainController) Get() {
this.Ctx.WriteString("hello")
}
```
至此我們的控制器分析基本完成了,接下來讓我們看看如何來編寫 model。
[model 邏輯](model.md)
- beego簡介
- 為 beego 貢獻
- 發布版本
- 升級指南
- beego安裝升級
- Bee 工具的使用
- 快速入門
- 新建項目
- 路由設置
- Controller 運行機制
- model 邏輯
- view 編寫
- 靜態文件處理
- beego 的 MVC 架構介紹
- controller 設計
- 參數配置
- 路由設置
- 控制器函數
- XSRF 過濾
- 請求數據處理
- session 控制
- 過濾器
- flash 數據
- URL構建
- 多種格式數據輸出
- 表單數據驗證
- 錯誤處理
- 日志處理
- model設計
- 概述
- ORM 使用
- CRUD 操作
- 高級查詢
- 原生 SQL 查詢
- 構造查詢
- 事務處理
- 模型定義
- 命令模式
- 測試用例
- 自定義字段
- FAQ
- view 設計
- 模板語法指南
- 模板處理
- 模板函數
- 靜態文件處理
- 模板分頁處理
- beego 的模塊設計
- session 模塊
- grace 模塊
- cache 模塊
- logs 模塊
- httplib 模塊
- context 模塊
- toolbox 模塊
- config 模塊
- i18n 模塊
- beego 高級編程
- 進程內監控
- API 自動化文檔
- 應用部署
- 獨立部署
- supervisor 部署
- Nginx 部署
- apache 部署
- beego 第三方庫
- 應用例子
- 在線聊天室
- 短域名服務
- Todo 列表
- beego實用庫
- 驗證碼
- 分頁
- FAQ