# 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