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

How to use routes defined in a parent module in Play?

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

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

它抛出一个错误。

您需要查看 "Aggregating reverse routers" - https://www.playframework.com/documentation/2.5.x/AggregatingReverseRouters

例如,我有子模块 "handlebars" 并且想在该子模块中使用来自主项目的路由。所以我将下一个字符串添加到 `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