如何在Play中使用父模块中定义的路由?

时间:2016-04-24 18:42:25

标签: scala playframework playframework-2.0

我有一个模块,它有一个控制器和几个模板。现在,我想引用位于父模块中的控制器。我试过这样的话:

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

它会抛出错误。

1 个答案:

答案 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