我有一个模块,它有一个控制器和几个模板。现在,我想引用位于父模块中的控制器。我试过这样的话:
case Some(user) => Redirect(routes.Application.index)
不幸的是,我收到以下错误:
[error] case Some(user) => Redirect(routes.Application.index)
[error] ^
我也尝试过这样:
case Some(user) => Redirect(controllers.Application.index)
但我仍然遇到同样的错误。当我尝试引用属于模块的控制器时,也会发生此错误。
我试过这样的话:controllers.module.Controller.action
。
此外,在模块中引用实际位于父模块中的视图时,我遇到同样的问题。
例如,我想在模块中引用模板main
:
@views.html.main
它会抛出错误。
答案 0 :(得分:4)
您需要查看“聚合反向路由器” - https://www.playframework.com/documentation/2.5.x/AggregatingReverseRouters
例如,我有子模块“把手”,并希望使用该子模块中主项目的路径。所以我将下一个字符串添加到`build.sbt':
lazy val handlebars = (project in file("modules/handlebars"))
.enablePlugins(PlayJava)
.settings(
aggregateReverseRoutes := Seq(root)
)
lazy val root: Project = (project in file("."))
.enablePlugins(PlayJava)
.aggregate(handlebars)
.dependsOn(handlebars)
aggregateReverseRoutes:= Seq(root)
说SBT首先编译来自root
项目的路由,并在编译handlebars
项目时使用它们。由于依赖项中的递归,您还需要对root
项目使用隐式类型,如root: Project
。
问题的完整故事:https://github.com/playframework/playframework/issues/1390