我正在尝试在我的应用程序中使用模块中的共享控制器,但我不确定该怎么做。这是我想要做的:
- 我有两个 revel 应用程序,一个前端应用程序和一个后端应用程序。前端应用程序用于显示面向用户的站点,后端应用程序用于管理内容。
- 我根据预订示例创建了一个特殊的控制器来连接到数据库。
- 我希望前端和后端应用程序都使用相同的控制器,以最大限度地减少冗余。
从示例中,当您想要一个控制器数据库时,它大致转换为:
type DBController {
*revel.Controller
}
type App {
DBController
}
这适用于我只想拥有 1 个应用程序,但是当我想将控制器共享到另一个应用程序时,我无法导入DBController
到应用程序。
我尝试过的事情
我尝试移动DBController
到它自己的包,然后导入它并直接从它继承:
// in db.go
package controllers
// import and stuffs
type DBController {
*revel.Controller
}
// in app.go
package controllers
import (
dbc "site.com/modules/controllers"
)
type App struct {
dbc.DBController
// *dbc.DBController
}
这给了我一个恐慌错误,指出找不到路由:
panic: Route validation error (in /app/path/routes:7):
revel/controller: failed to find controller App
在有和没有指针的情况下继承。
我也尝试过 Revel 的模块,使用相同的代码,但不同的目录并通过配置导入:
// app.conf
modules.dbcontroller=site.com/modules/dbcontroller
然后在app.go
:
type App struct {
DBController
}
但它仍然没有像以前一样出现同样的错误。我非常相信正确的路线是使用模块,因为文档说(强调我的):
模块是可以插入应用程序的包。它们允许在多个 Revel 应用程序或第三方来源之间共享控制器、视图、资产和其他代码。
模块应该与 Revel 应用程序的布局具有相同的布局。“托管”应用程序会将其合并如下:
- module/app/views 中的任何模板都将添加到 Template Loader 搜索路径中
- module/app/controllers 中的任何控制器都将被视为在您的应用程序中。
ETC..
但我不确定如何从这里共享和派生我的控制器。
TL; 博士
如何在 Revel 中共享控制器,以便我可以从其他模块继承控制器,大致如下:
import dbc "site.com/modules/dbcontroller"
type App struct {
dbc.DBController
}
这样DBController
可以与多个狂欢应用程序一起使用吗?非常感谢。