处理post请求
添加商品
前端v
<form action="/product/add" method="post" >
<label class="col-sm-3 control-label">商品名称</label>
<div class="col-sm-6">
<input type="text" class="form-control" name="ProductName" >
</div>
控制器c
注册控制器,使用了分组路由
productRepository := repositories.NewProductManager("product", db)
productSerivce := services.NewProductService(productRepository)
productParty := app.Party("/product")
product := mvc.New(productParty)
product.Register(ctx, productSerivce)
product.Handle(new(controllers.ProductController))
Context是iris框架中的一个路由上下文对象
在该Context的接口定义中可以发现,包含很多处理请求及数据返回的操作。在iris框架内,提供给开发者一个ContextPool,即存储上下文变量Context的管理池,该变量池中有多个context实例,可以进行复用。每次有新请求,就会获取一个新的context变量实例,来进行请求的路由处理。比如能够获取到表单中的数据,能够进行重定向
控制器编写
type ProductController struct {
Ctx iris.Context
ProductService services.IProductService
}
func (p *ProductController) PostAdd() {
product := &datamodels.Product{}
p.Ctx.Request().ParseForm()
//创建decoder的实例
//将前端表单里的数据解码
dec := common.NewDecoder(&common.DecoderOptions{TagName: "shop"})
if err := dec.Decode(p.Ctx.Request().Form, product); err != nil {
p.Ctx.Application().Logger().Debug(err)
}
_, err := p.ProductService.InsertProduct(product)
if err != nil {
p.Ctx.Application().Logger().Debug(err)
}
p.Ctx.Redirect("/product/all")
}
处理GET请求
控制器
func (p *ProductController) GetManager() mvc.View {
//获取到URL参数
idString := p.Ctx.URLParam("id")
id, err := strconv.ParseInt(idString, 10, 16)
if err != nil {
p.Ctx.Application().Logger().Debug(err)
}
product, err := p.ProductService.GetProductByID(id)
if err != nil {
p.Ctx.Application().Logger().Debug(err)
}
return mvc.View{
Name: "product/manager.html",
Data: iris.Map{
"product": product,
},
}
}
前端
<input type="text" class="form-control" name="ProductName" value="{{.product.ProductName}}">