iris-v12 框架搭建二 mvc架构
在这里我就默认你已经会了搭建非mvc架构的方法(不懂得看iris-v12 框架搭建一 快速启动)。
想要搭建mvc的架构非常简单,只要使用iris的mvc包就好了。不过在此之前我们需要先学习一下路由组的构建。
import (
"fmt"
"github.com/kataras/iris/v12"
)
func main() {
//使用默认配置
//该实例在生成状态下在"./views"上注册html视图引擎,
//并从"./locales/*/*"加载区域设置。
//实例在出现死机时恢复,并记录传入的http请求。
app := iris.Default()
// 将/v1下的所有路径分到同一组
v1 := app.Party("/v1")
{
// Method: POST
// url: http://localhost:8080/v1/best
v1.Post("/best",
func(ctx iris.Context) {
fmt.Println("把街角魔族是动漫增加最好看的")
})
// Method: DELETE
// url: http://localhost:8080/v1/other
v1.Delete("/other", func(ctx iris.Context) {
fmt.Println("删除街角魔族以外的动漫")
})
// Method: PUT
// url: http://localhost:8080/v1/anime
v1.Put("/anime",
func(ctx iris.Context) {
fmt.Println("把街角魔族是好看的动漫修改为最好")
})
// Method: GET
// url: http://localhost:8080/v1/anime
v1.Get("/anime", func(ctx iris.Context) {
fmt.Println("增加街角魔族是最好看的动漫")
})
}
app.Run(iris.Addr(":8080"))
}
依次尝试每一个路由后的结果⬇
Application started. Press CTRL+C to shut down.
把街角魔族是动漫增加最好看的
[INFO] 2020/06/30 08:48 200 1.995ms ::1 POST /v1/best
删除街角魔族以外的动漫
[INFO] 2020/06/30 08:48 200 0s ::1 DELETE /v1/other
把街角魔族是好看的动漫修改为最好
[INFO] 2020/06/30 08:48 200 998.8µs ::1 PUT /v1/anime
增加街角魔族是最好看的动漫
[INFO] 2020/06/30 08:49 200 0s ::1 GET /v1/anime
ok可以看的出来/v1下的路由都被归类起来了。那么按照mvc的方式只要把这个路由组传递给controller处理就ok了⬇
将上面代码中从v1 := app.Party("/v1")
到结尾的代码更改为以下内容
// 将/v1下的所有路径分到同一组
v1 := app.Party("/v1")
//基于“party”返回一个新的mvc应用程序。
//应用程序创建一个新的引擎,负责绑定依赖项并创建和激活应用程序的控制器。
v1App := mvc.New(v1)
//Handle为当前mvc应用程序的路由器提供控制器。
v1App.Handle(new(controllers.ViewController))
app.Run(iris.Addr(":8080"))
新建文件夹controllers,在controllers下创建viewController.go
注意项
- viewController这个结构体内还可以放许多东西例如session,service之类的,不过我们现在仅展示页面的话什么都不需要。
- mvc.View这个结构体还有Code,Err等,这一类属性,有兴趣自己去看看源码就懂了。
- Data: iris.Map{“xxx”: interface{}},htm里用{{.xxx}}的方式接收
- 对方法的花式取名方式和返回与接收各类格式内容感兴趣的可以看我下一篇内容。
package controllers
import (
"github.com/kataras/iris"
"github.com/kataras/iris/v12/mvc"
)
type ViewController struct {
Ctx iris.Context
}
//注意 这里的方法名不能随意取名
//名字的开头是url的method,后面以大写字母为分隔路径
//如果路径感觉过长可以继续再给路由组v1分组,用多个controller接收
//此处url:http://localhost:8080/v1/views/hello,method:GET
func (v *ViewController) GetViewsHello() mvc.View {
helloView := mvc.View{
//文件名,视图文件必须放在views文件夹下,因为这是app := iris.Default()默认的
//当然你也可以自己设置存放位置
Name: "hello.html",
//传入的数据
Data: iris.Map{"content": "街角魔族是最好看的动漫"},
}
return helloView
}
新建文件夹views,在views下创建hello.html
<!DOCTYPE HTML>
<html>
<body>
<h1>{{.content}}</h1>
</body>
</html>
调用url:http://localhost:8080/v1/views/hello
以上一个简单的mvc结构就完成了。