今天來講講怎麼做新增跟修改,新增跟修改主要是 Form 的處理。
BeeGo 可以直接從之前定義的 model 產生 form,首先在 controllers/myuser.go 裡新增一個 function
// controllers/myuser.go
// GetAddForm ...
func (c *MyUserController) GetAddForm() {
c.Data["Form"] = &models.User{}
c.TplName = "user/create.tpl"
}
接著修改 views/user/create.tpl ,讓他可以顯示 form
{{ template "base.tpl" . }}
{{ define "content" }}
<h1>User - Create</h1>
<form action="" method="post">
{{ .Form|renderform }}
<br/><input type="submit" />
</form>
{{ end }}
調整 router
# routers/router.go
// 略
beego.Router("/myuser/create", &controllers.MyUserController{}, "get:GetAddForm")
最後瀏覽 http://localhost:8080/myuser/create/ 就可以看到 form 了。
不過這個 form 實在是有點醜,而且有以下問題:
好,讓我們來一個一個解決。
前三者的原因是類似的,renderform 是依據 struct User 的定義來決定如何顯示的。這部份可以藉著修改 models/user.go ,在 struct 欄位後面加上 structtag 來處理。
type User struct {
Id int64 `orm:"auto" form:"-"` // - 表示不顯示
Name string `orm:"size(128)" form:"name"`
Gender string `orm:"size(1)" form:"gender"`
Birthday time.Time `orm:"type(datetime)" form:"birthday,date"` // 改成這樣還是沒顯示
}
不過 Birthday 欄位還是沒有出現。
閱讀 Beego 的 templatefunc.go 以後,沒看出什麼端倪,決定這個 form 還是先用手刻的方式解決,等以後有看到什麼新資料再來處理。