Beego框架 MVC Controller 参数设置路由设置
Posted 一只小阿大:)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Beego框架 MVC Controller 参数设置路由设置相关的知识,希望对你有一定的参考价值。
目录
下图是Beego MVC框图
参数设置
beego 目前支持 INI、XML、JSON、YAML 格式的配置文件解析,但是默认采用了 INI 格式解析,用户可以通过简单的配置就可以获得很大的灵活性。
默认配置解析
beego 默认会解析当前应用下的 conf/app.conf 文件
通过这个文件你可以初始化很多 beego 的默认参数:
它们都维护在结构体 beego/server/web#Config 。
上面这些参数会替换 beego 默认的一些参数, beego 的参数主要有哪些呢?请参考https://godoc.org/github.com/beego/beego#pkg-constants
BConfig 就是 beego 里面的默认的配置,也是结构体 beego/server/web#Config 的实例。
你也可以直接通过web.BConfig.AppName="beepkg"这样来修改,和上面的配置效果一样,只是一个在代码里面写死了,而配置文件就会显得更加灵活。
也可以在配置文件中填写数据库相关信息
其余的参数设置,比如API和多配置文件啥的可以看手册
路由设置
beego 存在三种方式的路由:固定路由、正则路由、自动路由
看到路由这里其实我人是有点晕的,不是之前看框图是只有三种路由方式嘛,怎么文档中突然多了基础路由啥的,其实呢Beego用的路由是RESTful Controller 路由
RESTful是什么?
简单来讲RESTful 是一种目前 API 开发中广泛采用的形式,beego 默认就是支持这样的请求方法,也就是用户 Get 请求就执行 Get 方法,Post 请求就执行 Post 方法。因此默认的路由是这样 RESTful 的请求方式。
基础路由是一种请求写个路由,POST请求写个POST路由,就比较麻烦,RESTful是把各种请求的路由变成方法,请求是什么,就调用哪个路由方法
首先认识下项目结构
MVC结构嘛,肯定会有Models,View,Controller,我这没有View,是因为我搞得前后端分离的api
routers就是跟路由相关的东西了
如何添加路由
前面的都是路径,我箭头指向的哪个就是方法(自己创建的)
然后我重写了Get方法,注释没改,注释这里会自动生成代码的,后续会说,那么我这个路由就是让页面输出u.TplName字符串
Beego自动生成代码在哪里体现
注意注释!自动生成代码根据注释来的
固定路由
固定路由也就是全匹配的路由
默认格式:
beego “github.com/beego/beego/v2/server/web”
因为import 的时候beego "github.com/beego/beego/v2/server/web"所以beego就相当于web
正则路由
正则路由就是能够让我们更灵活的匹配内容,并且减少开发者的代码量
手册中有很多种写法,我拿第一种写法试了下(手册中的双引号是中文 😃)
web.Router("/api/?:id", &controllers.RController)
默认匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123”,URL”/api/“可正常匹配
可以在 Controller 中通过如下方式获取上面的变量:
this.Ctx.Input.Param(":id")
在router.go中加上beego.Router("/api/?:id", &controllers.MyTestController)
后在Get请求中添加获取id后输出到页面
效果图:
自定义方法及 RESTful 规则
上面列举的是默认的请求方法名(请求的 method 和函数名一致,例如 GET 请求执行 Get 函数,POST 请求执行 Post 函数),如果用户期望自定义函数名,那么可以使用如下方式:
web.Router("/",&IndexController,"*:Index")
使用第三个参数,第三个参数就是用来设置对应 method 到函数名,定义如下
- *表示任意的 method 都执行该函数
- 使用 httpmethod:funcname 格式来展示
- 多个不同的格式使用 ; 分割
- 多个 method 对应同一个 funcname,method 之间通过 , 来分割
咱先说下我试这个的时候我犯的一个傻逼错误
‘GetHello’ method doesn’t exist in the controller MyTestController
说我没有这个方法,然后我发现方法的接收者是别的结构体…
首先在router中添加beego.Router("/api/food", &controllers.MyTestController, “Get:GetHello”)
也就是用户访问127.0.0.1:8080/api/food的时候,如果是Get请求去执行GetHello这个方法
再去Controller中添加这个方法即可
自动匹配
咱们首先要注册自动路由
beego.AutoRouter(&controllers.MyTestController)
那么 beego 就会通过反射获取该结构体中所有的实现方法,你就可以通过如下的方式访问到对应的方法中:
/MyTest/GetHello调用 MyTestController 中的 GetHello方法
/MyTest/GetFunc调用 MyTestController 中的 GetFunc方法
自动获取后缀名
只能获取html,xml,json
注解路由
beego创建项目,router中init就是注解路由,查文档使用就行
以上是关于Beego框架 MVC Controller 参数设置路由设置的主要内容,如果未能解决你的问题,请参考以下文章
"undefined: beego in beego.AppConfig" - 如何访问 Beego 配置参数