Я пытаюсь использовать общий контроллер из модуля в своем приложении, но я не совсем уверен, как это сделать. Вот что я хочу сделать:
- У меня есть два приложения Revel, внешнее и внутреннее приложение. Фронтенд-приложение используется для отображения сайта, ориентированного на пользователя, а бэкэнд-приложение предназначено для администрирования.
- Я создал специальный контроллер для подключения к базе данных в соответствии с примером бронирования.
- Я хочу, чтобы внешнее и внутреннее приложение использовали один и тот же контроллер, чтобы свести к минимуму избыточность.
Из примера, когда вы хотите иметь одну базу данных контроллера, это примерно означает следующее:
type DBController {
*revel.Controller
}
type App {
DBController
}
Это работает, когда я хочу иметь только одно приложение, но когда я хочу поделиться контроллером с другим приложением, я не могу импортировать 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. Приложение «хостинг» объединит его следующим образом:
- Любые шаблоны в модулях/приложениях/представлениях будут добавлены в путь поиска загрузчика шаблонов.
- Все контроллеры в модуле/приложении/контроллерах будут обрабатываться так же, как если бы они были в вашем приложении.
и т.д..
Но я не уверен, как я могу поделиться и получить свой контроллер отсюда.
TL; DR
Как мне поделиться контроллером в Revel, чтобы я мог наследовать контроллер от другого модуля, примерно так:
import dbc "site.com/modules/dbcontroller"
type App struct {
dbc.DBController
}
чтобы DBController
можно было использовать с несколькими приложениями Revel? Большое тебе спасибо.