gpt4 book ai didi

go - 从 Revel 框架中的模块继承 Controller

转载 作者:IT王子 更新时间:2023-10-29 01:48:08 29 4
gpt4 key购买 nike

我正尝试在我的应用程序中使用模块中的共享 Controller ,但我不太确定该怎么做。这是我想要做的:

  1. 我有两个 Revel 应用程序,一个是前端应用程序,一个是后端应用程序。前端应用用于显示面向用户的网站,后端应用用于管理。
  2. 我根据 booking sample 创建了一个特殊的 Controller 来连接到数据库.
  3. 我希望前端和后端应用使用同一个 Controller ,以尽量减少冗余。

从示例来看,当你想拥有一个 Controller 数据库时,它大致翻译成这样:

type DBController {
*revel.Controller
}

type App {
DBController
}

这在我只想拥有 1 个应用程序时有效,但是当我想将 Controller 共享给另一个应用程序时,我无法将 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 错误,指出找不到路线:

panic: Route validation error (in /app/path/routes:7):
revel/controller: failed to find controller App

在带指针和不带指针的继承中。

我也尝试过 Revel 的 module ,具有相同的代码,但不同的目录并通过配置导入:

// app.conf
modules.dbcontroller=site.com/modules/dbcontroller

然后在 app.go 中:

type App struct {
DBController
}

但它仍然无法正常工作,并出现与之前相同的错误。我非常确信正确的路线是使用模块,因为文档说(强调我的):

Modules are packages that can be plugged into an application. They allow sharing of controllers, views, assets, and other code between multiple Revel applications or from third-party sources.

A module should have the same layout as a Revel application’s layout. The “hosting” application will merge it in as follows:

  1. Any templates in module/app/views will be added to the Template Loader search path
  2. Any controllers in module/app/controllers will be treated as if they were in your application.

etc..

但我不确定如何从这里共享和派生我的 Controller 。

TL;博士

我如何在 Revel 中共享 Controller ,以便我可以从其他模块继承 Controller ,大致如下:

import dbc "site.com/modules/dbcontroller"

type App struct {
dbc.DBController
}

以便 DBController 可以与多个 revel 应用程序一起使用?非常感谢。

最佳答案

我不是权威,但我会提出一些可能对您有所帮助的观察结果,即使我没有完整的答案给您。

关于您的问题,首先让我印象深刻的是术语“继承”的使用——Go 不支持继承。它确实支持嵌入。我可能将问题主题写为“在 Revel 框架中重用模块中的 Controller 。

其次,我想知道您是在尝试在两个单独的 Revel 应用程序之间重用 Revel 模块,还是在一个 Revel 应用程序的两个单独部分中重用模块中的代码有一个前端和一个后端。快速阅读揭示框架让我认为模块是为前者而不是后者设计的。

第三,我想知道您是否将文件与包混淆了。在学习 Go 时,一个包可以跨越多个文件对我来说并不明显。如果 db.go 和 app.go 等两个文件中存在相同的“包 Controller ”声明,它们仍然在同一个包中。

关于go - 从 Revel 框架中的模块继承 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32033369/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com