Playframework Play Framework[2.4.x]如何在子模块中处理公共资产';s路由文件

Playframework Play Framework[2.4.x]如何在子模块中处理公共资产';s路由文件,playframework,playframework-2.4,Playframework,Playframework 2.4,在本次讨论中,上述问题可作为“子模块”含义的基线: 如果您了解播放子模块,那么在给定上下文的情况下,如何在子模块上输入路由条目以公开“公共”文件夹中的资产 每当我尝试创建一个基本条目(如下所示)时,我的整个根模块都无法编译单个路由,但我没有得到“可用”错误或其他可能发生的情况的指示 GET /assets/*file controllers.Assets.at(path="/public", file) 即使我注释掉根项目中的条目,也会发生编译器错误 因为我所有的子模块控制器都有前缀,所

在本次讨论中,上述问题可作为“子模块”含义的基线:

如果您了解播放子模块,那么在给定上下文的情况下,如何在子模块上输入路由条目以公开“公共”文件夹中的资产

每当我尝试创建一个基本条目(如下所示)时,我的整个根模块都无法编译单个路由,但我没有得到“可用”错误或其他可能发生的情况的指示

GET   /assets/*file  controllers.Assets.at(path="/public", file)
即使我注释掉根项目中的条目,也会发生编译器错误

因为我所有的子模块控制器都有前缀,所以我尝试了(当然)

唉,这也不起作用,但至少我得到了一个有用的错误,告诉我
类型资产不是包控制器的成员

有什么建议吗


PS:是的,我还尝试从根目录的路由文件中删除条目,以防名称空间冲突…

您必须在子模块控制器包中创建资产控制器:

package controllers.submodule

class Assets extends AssetsBuilder(DefaultHttpErrorHandler)
然后在子模块的路由器文件(应命名为submodule.routes)中声明此控制器的路由:

GET    /submodule/public/*file    controllers.submodule.Assets.versioned(path="/public", file: Asset)
最好在路由前面加上子模块的名称,以避免在其他子模块名称带有静态路由条目的情况下发生路由冲突

还有一件事:所有静态文件都托管在根模块的“lib”文件夹中:

lib/submodule/css...
lib/submodule/js...
因此,您必须像这样更新视图:

<script type="text/javascript" src="@controllers.submodule.routes.Assets.versioned("lib/submodule/js/your-submodule-script.js")"></script>

在主路由文件(主项目的路由感觉)中,我有一个小宝石:
->/submoduleNAME submodule.routes
,它从外部角度给出了子模块的别名。我很好奇这是否适用,但我想大声说出来,这根本不重要……在哪里可以找到错误处理程序<代码>没有足够的参数用于构造函数AssetBuilder:(errorHandler:play.api.http.HttpErrorHandler)controllers.AssetBuilder。
我没有提到它,但您必须将这一行添加到根模块的路由文件中。我刚刚编辑了我的回答。你的回答对我很有帮助。然而,我建议调查两个细节:a)末端的路线缺少斜线,对吗?应为“->/submodule.routes”。b) “对象资产…”表示未使用InjectedRoutesGenerator设置,现在建议使用该设置(播放2.4)。使用InjectedRoutesGenerator,它需要是“类资产…”才能编译。@akauppi您的评论b)点帮助我解决了我的问题,如中所述。请随意将其作为我问题的答案,我很高兴予以承认。
<script type="text/javascript" src="@controllers.submodule.routes.Assets.versioned("lib/submodule/js/your-submodule-script.js")"></script>
-> / submodule.routes