Skip to content
extrame edited this page Nov 13, 2014 · 14 revisions

Controller定义方法

一个Controller有三个基本属性需要定义,定义的方式采用特定结构体成员+注释的形式完成,例如:

type Controller struct {
    goblet.Route  `/t`
    goblet.Render `html=template`
    goblet.Layout `detail`
    goblet.RestController
}
  • 第一个特定结构体成员是goblet.Route匿名变量,他的注释是一个url path,标明这个router的url路径
  • 第二个特定结构体成员是goblet.Render匿名变量,他的注释是一个标明该controller可以使用哪些渲染方式的选项,关于渲染方式的选项具体定义方式,参见渲染方式
  • 第三个特定结构体成员是goblet.Layout匿名变量,他的注释是一个标明该controller使用哪个layout模板的模板名称
  • 第四个特定结构体成员用于标明Controller的类型,分别可以用以下三个匿名变量来对应下诉三种Controller
    • goblet.SingleController
    • goblet.RestController
    • goblet.GroupController

以上四种成员变量都不是必须指定的,默认规则如下:

  • url默认指向Controller同名路径(区分大小写)
  • render默认指向渲染模板路径下的同名路径(区分大小写)
  • Layout默认使用“default”模板
  • Controller类型如果没有指定,首先检查是否实现Get或者Post函数,判定是否是SingleController;再看是否实现了RestController的相关函数,判定是否是SingleController;最次判定为GroupController

Controller的类型

一共有三种类型的Controller:

  • SingleController
  • RestController
  • GroupController

SingleController

SingleController指向一个单独的url节点,定义方式是在Controller里面实现以下函数的一个或者多个

  • Get(cx *Context)函数 或者
  • Post(cx *Context)函数

注意 SingleController的goblet.Render指向一个具体的渲染模板文件

Get函数

Get函数指向该Controller的Get方法

Post函数

Get函数指向该Controller的Post方法

RestController

RestController指向一个满足类似ROR的Rest Controller定义的url节点,定义方式是在Controller里面实现以下函数的一个或者多个

  • Read(string, *Context)函数 或者
  • ReadMany(cx *Context)函数 或者
  • New(cx *Context)函数 或者
  • UpdateMany(*Context)函数 或者
  • Create(cx *Context)函数

Read函数

Read函数指向该Controller的Read方法

  • URL:controller/id.html,url path的最后一个部分会被作为id传入函数
  • HTTP方法:GET

ReadMany函数

ReadMany函数指向该Controller的ReadMany方法

  • URL:controller.html
  • HTTP方法:GET

New函数

New函数指向该Controller的New方法

  • URL:controller/new.html
  • HTTP方法:GET

UpdateMany函数

UpdateMany函数指向该Controller的UpdateMany方法

  • URL:controller.html
  • HTTP方法:PUT

DeleteMany函数

UpdateMany函数指向该Controller的DeleteMany方法

  • URL:controller.html
  • HTTP方法:DELETE

Create函数

Create函数指向该Controller的Create方法

  • URL:controller.html
  • HTTP方法:POST

GroupController

GroupController指向一个url节点,该节点使用一个目录作为渲染的根目录,并根据url调取具体的函数,例如示例所示的Controller,如果实现Test函数,则将url中/controller/test指向该函数