Iris_MVC


2. MVC包使用

在Iris框架中,封裝了mvc包作為對mvc架構的支持,方便開發者遵循mvc的開發原則進行開發。 iris框架支持請求數據、模型、持久數據分層處理,並支持各層級模塊代碼綁定執行。 MVC即:model、view、controller三個部分,分別代表數據層、視圖層、控制層。控制器層負責完成頁面邏輯、實體層負責完成數據准備與數據操作、視圖層負責展現UI效果。 在iris框架中,用一張圖表示前端請求、服務端處理請求、服務端返回數據到前端的請求過程圖,描述如下:

2.1 mvc.Application

iris框架中的mvc包中提供了Application結構體定義。開發者可以通過注冊自定義的controller來使用對應提供的API,其中包含路由組router.Party,以此用來注冊layout、middleware以及相應的handlers等。

2.2 iris.mvc特性

iris框架封裝的mvc包,支持所有的http方法。比如,如果想要提供GET,那么控制器應該有一個名為Get()的函數,開發者可以定義多個方法函數在同一個Controller中提供。這里的Get、Post方法是指的直接和八種請求類型同名的方法,mvc模塊會自動執行到Get()、Post()等八種對應的方法。如下所示:

 //自定義的控制器
 type CustomController struct{}
 //注冊自定義控制器處理請求
 mvc.New(app).Handle(new(CustomController))
 //自動處理基礎的Http請求
 //Url: http://localhost:8000
 //Type:GET請求
 func (cc *CustomController) Get() mvc.Result{
     //todo
     return mvc.Response{
         ContentType:"text/html",
     }
 }
 /**
  * Url:http://localhost:8000
  * Type:POST
  **/
 func (cc *CustomController) Post() mvc.Result{
     //todo
     return mvc.Response{}
 }

2.3 根據請求類型和請求URL自動匹配處理方法

在iris框架中的mvc設計包中,設定了自定義的控制器以后,支持根據請求類型和對應的URL自動匹配對應的處理方法。具體案例如下:

 /**
  * url:http://localhost:8000/info
  * type:GET請求
  **/
 func (cc *CustomController) GetInfo() mvc.Result{
     //todo
 }
 ​
 /**
  * url:http://localhost:8000/login
  * type:POST
  **/
 func (cc *CustomController) PostLogin() mvc.Result{
     //todo
 }

如上案例,當我們發起請求時,iris框架就能夠自動匹配對應的控制器的處理方法。除了上述get和post兩個方法之外,http請求的八種類型中的其他請求類型,也支持自動匹配。

2.4 BeforeActivation方法

在通過Configure和Handle進行了自定義Controller綁定以后,就可以使用自己自定義的Controller來進行自定義處理處理請求方法。開發者可以在BeforeActivation方法中來處理請求定義。如下所示,我們給出案例說明:

 func (m *CustomController) BeforeActivation(a mvc.BeforeActivation){
     a.Handle("GET","/users/info","QueryInfo")
 }
 //對應處理請求的方法
 func (m *CustomController) QueryInfo() mvc.Result{
     //todo
 }

2.5 使用mvc.Configure配置路由組和控制器

除了使用mvc.new(app)來構建mvc.Application結構體對象和Handle方法來配置處理請求的控制器外,iris框架還支持使用mvc.Configure來配置路由組和控制器的設置。具體使用方法如下:

 mvc.Configure(app.Party("/user"), func(mvc *mvc.Application) {
         mvc.Handle(new(UserController))
 })

本節課中我們學習了mvc包中控制器極其處理方法的基本用法,在實戰項目中,我們會在本節課學習內容的基礎上,繼續深入學習更詳細的操作。

2.6 代碼

package main

import (
	"github.com/kataras/iris"
	"github.com/kataras/iris/mvc"
)

func main() {

	app := iris.New() //返回一個application對象

	//設置自定義控制器
		//type UserController struct {
		//}
	//mvc.New(app)返回一個MVC的application對象
	//application的Handle方法,用來注冊一個自定義的控制器,把控制器設置給了app對象
	mvc.New(app).Handle(new(UserController))
	//new來聲明一個控制器,返回一致指針,make是初始化切片、map、channel的,返回本身,因為本身就是指針了

	//路由組的mvc處理
	mvc.Configure(app.Party("/user"), func(context *mvc.Application) {
		//context是*mvc.Application類型
		//和這個 mvc.New(app) 一樣
		context.Handle(new(UserController))
	})

	app.Run(iris.Addr(":8009"))
}

//第一種智能處理請求
//url:http://localhost:8009
//type:Get
func (uc *UserController) Get() string { //給控制器聲明一個Get方法
	iris.New().Logger().Info(" Get 請求 ")
	return "hell world"
}
func (uc *UserController) Post() { //給控制器聲明一個Post方法
	iris.New().Logger().Info(" post 請求 ")
}
func (uc *UserController) Put() { //給控制器聲明一個Put方法
	iris.New().Logger().Info(" put 請求 ")
}

//第二種智能處理請求
//url:http://localhost:8009/info
//type:Get
func (uc *UserController) GetInfo() mvc.Result { //Info和路徑一致,首字母大寫
	iris.New().Logger().Info(" get 請求, 請求路徑為info ")
	return mvc.Response{
		//返回到前端就是json格式
		Object: map[string]interface{}{
			"code":     1,
			"msessage": "請求成功",
		},
	}
}

type UserController struct {
}

//第三種智能處理請求
//BeforeActivation自動執行的方法
func (uc *UserController) BeforeActivation(a mvc.BeforeActivation) {
	a.Handle("GET", "/query", "UserInfo") //指定哪一個方法來處理這個請求
}
func (uc *UserController) UserInfo() mvc.Result {
	//todo
	iris.New().Logger().Info(" user info query ")
	return mvc.Response{}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM