2016-04-24 33 views
2

我有一个模块,它有一个控制器和几个模板。现在,我想引用位于父模块中的控制器。我想这样的:如何在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 

它抛出一个错误。

回答

3

你需要寻找到“集结反向路由器” - 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

+0

非常感谢您的帮助!你能告诉我如何在我的控制器和模板中引用路线吗? –

+1

我使用Java,并且我在子项目中的代码看起来像是'controllers.routes.Assets.versioned(new controllers.Assets.Asset(url))。toString()',其中'url'只是一个字符串。我想,你需要调用'Redirect(controllers.routes.Application.index)'。 –

+0

完美的作品!非常感谢。 –

相关问题