beego——URL构建

如果可以匹配URl,那么beego也可以生成URL吗?当然可以。

UrlFor()函数就是用于构建执行函数的URL的。它把对应控制器和函数名结合的字符串作为第一个参数,其余参数对应URL中的变量。未知变量将添加到URL中作为查询参数。

下面定义了一个相应的控制器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
type TestController struct {
    beego.Controller
}
 
func (this *TestController) Get() {
    this.Data["Username"] = "astaxie"
    this.Ctx.Output.Body([]byte("ok"))
}
 
func (this *TestController) List() {
    this.Ctx.Output.Body([]byte("i am list"))
}
 
func (this *TestController) Params() {
    this.Ctx.Output.Body([]byte(this.Ctx.Input.Params()["0"] + this.Ctx.Input.Params()["1"] + this.Ctx.Input.Params()["2"]))
}
 
func (this *TestController) Myext() {
    this.Ctx.Output.Body([]byte(this.Ctx.Input.Param(":ext")))
}
 
func (this *TestController) GetUrl() {
    this.Ctx.Output.Body([]byte(this.UrlFor(".Myext")))
}

  

下面是我们注册的路由:

1
2
3
beego.Router("/api/list", &TestController{}, "*:List")
beego.Router("/person/:last/:first", &TestController{})
beego.AutoRouter(&TestController{})

  

那么通过方式可以获取相应的URL地址:

1
2
3
4
5
6
7
8
9
10
11
beego.URLFor("TestController.List")
// 输出 /api/list
 
beego.URLFor("TestController.Get", ":last", "xie", ":first", "asta")
// 输出 /person/xie/asta
 
beego.URLFor("TestController.Myext")
// 输出 /Test/Myext
 
beego.URLFor("TestController.GetUrl")
// 输出 /Test/GetUrl

  

模板中如何使用

默认情况下,beego已经注册了urlfor函数,用户可以通过如下的代码进行调用

1
{{urlfor "TestController.List"}}

  

为什么不把URL写死在模板中,反而要动态构建?有两个很好的理由:

(1)反向解析通常比硬编码URL更直观。同时,更重要的是你可以只在一个地方改变URL,而不用到处找。

(2)URL创建会为你处理特殊字符的转义和Unicode数据。

posted @   明王不动心  阅读(645)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2017-12-15 Redis重大版本
2017-12-15 MySQL——存储引擎
2017-12-15 Redis使用场景
2017-12-15 查看一张表的信息
点击右上角即可分享
微信分享提示