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 配置参数

Spring mvc框架 controller间跳转 ,重定向 ,传参

Go语言框架:Beego vs Gin 的区别

2020 Beego学习

beego框架学习

beego框架入门