diff --git a/en/13.5.md b/en/13.5.md index af8da324..ec340c8a 100644 --- a/en/13.5.md +++ b/en/13.5.md @@ -6,253 +6,288 @@ We've already introduced the entire concept behind the Beego framework through e Our blog's directory structure can be seen below: - /main.go - /views: - /view.tpl - /new.tpl - /layout.tpl - /index.tpl - /edit.tpl - /models/model.go - /controllers: - /index.go - /view.go - /new.go - /delete.go - /edit.go +``` +/main.go +/views: + /view.tpl + /new.tpl + /layout.tpl + /index.tpl + /edit.tpl +/models/model.go +/controllers: + /index.go + /view.go + /new.go + /delete.go + /edit.go +``` + ## Blog routing Our blog's main routing rules are as follows: - //Show blog Home - beego.RegisterController("/", &controllers.IndexController{}) - //View blog details - beego.RegisterController("/view/: id([0-9]+)", &controllers.ViewController{}) - //Create blog Bowen - beego.RegisterController("/new", &controllers.NewController{}) - //Delete Bowen - beego.RegisterController("/delete/: id([0-9]+)", &controllers.DeleteController{}) - //Edit Bowen - beego.RegisterController("/edit/: id([0-9]+)", &controllers.EditController{}) +``` +//Show blog Home +beego.RegisterController("/", &controllers.IndexController{}) +//View blog details +beego.RegisterController("/view/: id([0-9]+)", &controllers.ViewController{}) +//Create blog Bowen +beego.RegisterController("/new", &controllers.NewController{}) +//Delete Bowen +beego.RegisterController("/delete/: id([0-9]+)", &controllers.DeleteController{}) +//Edit Bowen +beego.RegisterController("/edit/: id([0-9]+)", &controllers.EditController{}) +``` + ## Database structure A trivial database table to store basic blog information: - CREATE TABLE entries ( - id INT AUTO_INCREMENT, - title TEXT, - content TEXT, - created DATETIME, - primary key (id) - ); +``` +CREATE TABLE entries ( + id INT AUTO_INCREMENT, + title TEXT, + content TEXT, + created DATETIME, + primary key (id) +); +``` ## Controller IndexController: - type IndexController struct { - beego.Controller - } - - func (this *IndexController) Get() { - this.Data["blogs"] = models.GetAll() - this.Layout = "layout.tpl" - this.TplNames = "index.tpl" - } +``` +type IndexController struct { + beego.Controller +} + +func (this *IndexController) Get() { + this.Data["blogs"] = models.GetAll() + this.Layout = "layout.tpl" + this.TplNames = "index.tpl" +} +``` + + ViewController: - type ViewController struct { - beego.Controller - } - - func (this *ViewController) Get() { - inputs := this.Input() - id, _ := strconv.Atoi(this.Ctx.Params[":id"]) - this.Data["Post"] = models.GetBlog(id) - this.Layout = "layout.tpl" - this.TplNames = "view.tpl" - } +``` +type ViewController struct { + beego.Controller +} + +func (this *ViewController) Get() { + inputs := this.Input() + id, _ := strconv.Atoi(this.Ctx.Params[":id"]) + this.Data["Post"] = models.GetBlog(id) + this.Layout = "layout.tpl" + this.TplNames = "view.tpl" +} +``` + NewController - type NewController struct { - beego.Controller - } + +``` +type NewController struct { + beego.Controller +} + +func (this *NewController) Get() { + this.Layout = "layout.tpl" + this.TplNames = "new.tpl" +} + +func (this *NewController) Post() { + inputs := this.Input() + var blog models.Blog + blog.Title = inputs.Get("title") + blog.Content = inputs.Get("content") + blog.Created = time.Now() + models.SaveBlog(blog) + this.Ctx.Redirect(302, "/") +} +``` - func (this *NewController) Get() { - this.Layout = "layout.tpl" - this.TplNames = "new.tpl" - } - - func (this *NewController) Post() { - inputs := this.Input() - var blog models.Blog - blog.Title = inputs.Get("title") - blog.Content = inputs.Get("content") - blog.Created = time.Now() - models.SaveBlog(blog) - this.Ctx.Redirect(302, "/") - } EditController - type EditController struct { - beego.Controller - } - - func (this *EditController) Get() { - inputs := this.Input() - id, _ := strconv.Atoi(this.Ctx.Params[":id"]) - this.Data["Post"] = models.GetBlog(id) - this.Layout = "layout.tpl" - this.TplNames = "new.tpl" - } - - func (this *EditController) Post() { - inputs := this.Input() - var blog models.Blog - blog.Id, _ = strconv.Atoi(inputs.Get("id")) - blog.Title = inputs.Get("title") - blog.Content = inputs.Get("content") - blog.Created = time.Now() - models.SaveBlog(blog) - this.Ctx.Redirect(302, "/") - } +``` +type EditController struct { + beego.Controller +} + +func (this *EditController) Get() { + inputs := this.Input() + id, _ := strconv.Atoi(this.Ctx.Params[":id"]) + this.Data["Post"] = models.GetBlog(id) + this.Layout = "layout.tpl" + this.TplNames = "new.tpl" +} + +func (this *EditController) Post() { + inputs := this.Input() + var blog models.Blog + blog.Id, _ = strconv.Atoi(inputs.Get("id")) + blog.Title = inputs.Get("title") + blog.Content = inputs.Get("content") + blog.Created = time.Now() + models.SaveBlog(blog) + this.Ctx.Redirect(302, "/") +} +``` DeleteController - type DeleteController struct { - beego.Controller - } - - func (this *DeleteController) Get() { - id, _ := strconv.Atoi(this.Ctx.Params[":id"]) - this.Data["Post"] = models.DelBlog(id) - this.Ctx.Redirect(302, "/") - } +``` +type DeleteController struct { + beego.Controller +} + +func (this *DeleteController) Get() { + id, _ := strconv.Atoi(this.Ctx.Params[":id"]) + this.Data["Post"] = models.DelBlog(id) + this.Ctx.Redirect(302, "/") +} +``` ## Model layer - package models - - import ( - "database/sql" - "github.com/astaxie/beedb" - _ "github.com/ziutek/mymysql/godrv" - "time" - ) - - type Blog struct { - Id int `PK` - Title string - Content string - Created time.Time - } - - func GetLink() beedb.Model { - db, err := sql.Open("mymysql", "blog/astaxie/123456") - if err != nil { - panic(err) - } - orm := beedb.New(db) - return orm - } - - func GetAll() (blogs []Blog) { - db := GetLink() - db.FindAll(&blogs) - return - } - - func GetBlog(id int) (blog Blog) { - db := GetLink() - db.Where("id=?", id).Find(&blog) - return - } - - func SaveBlog(blog Blog) (bg Blog) { - db := GetLink() - db.Save(&blog) - return bg - } - - func DelBlog(blog Blog) { - db := GetLink() - db.Delete(&blog) - return +``` +package models + +import ( + "database/sql" + "github.com/astaxie/beedb" + _ "github.com/ziutek/mymysql/godrv" + "time" +) + +type Blog struct { + Id int `PK` + Title string + Content string + Created time.Time +} + +func GetLink() beedb.Model { + db, err := sql.Open("mymysql", "blog/astaxie/123456") + if err != nil { + panic(err) } + orm := beedb.New(db) + return orm +} + +func GetAll() (blogs []Blog) { + db := GetLink() + db.FindAll(&blogs) + return +} + +func GetBlog(id int) (blog Blog) { + db := GetLink() + db.Where("id=?", id).Find(&blog) + return +} + +func SaveBlog(blog Blog) (bg Blog) { + db := GetLink() + db.Save(&blog) + return bg +} + +func DelBlog(blog Blog) { + db := GetLink() + db.Delete(&blog) + return +} +``` ## View layer layout.tpl - - - My Blog - - - - - - - {{.LayoutContent}} - - - +``` + + + My Blog + + + + + + +{{.LayoutContent}} + + + +``` index.tpl -

Blog posts

+``` +

Blog posts

- + +``` view.tpl -

{{.Post.Title}}

- {{.Post.Created}}
- - {{.Post.Content}} +``` +

{{.Post.Title}}

+{{.Post.Created}}
+ +{{.Post.Content}} +``` new.tpl -

New Blog Post

-
- Title:
- Content - -
+``` +

New Blog Post

+
+Title:
+Content + +
+``` edit.tpl -

Edit {{.Post.Title}}

+``` +

Edit {{.Post.Title}}

-

New Blog Post

-
- Title:
- Content - - -
+

New Blog Post

+
+Title:
+Content + + +
+``` ## Links