【问题标题】:Play Framework [2.4.x] how to address public assets in a sub module's routing filePlay Framework [2.4.x] 如何在子模块的路由文件中处理公共资产
【发布时间】:2015-09-15 20:46:11
【问题描述】:

上一个问题可以作为当前讨论的“子模块”含义的基线:Play Framework [2.4.x] Working with Sub Modules

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

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

GET   /assets/*file  controllers.Assets.at(path="/public", file)

即使我注释掉根项目中的条目,也会出现编译器错误。

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

GET   /assets/*file  controllers.submodule.Assets.at(path="/public", file)

唉,这也不起作用,但至少我收到一个有用的错误,告诉我type Assets is not a member of package controllers.submodule

有什么建议吗?

PS:是的,我也尝试从根的路由文件中取出条目,以防它只是名称空间冲突......

【问题讨论】:

    标签: playframework playframework-2.4


    【解决方案1】:

    你必须在你的子模块控制器包中创建一个 Assets 控制器:

    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>
    

    编辑:不要忘记将此添加到根模块的路由文件(命名路由)中

    -> / submodule.routes
    

    【讨论】:

    • 在主路由文件(主项目的路由感觉)中,我有一个小宝石:-&gt; /submoduleNAME submodule.Routes,它基本上从外部角度给出了子模块的别名。好奇这是否适用,但大声思考我怀疑这甚至不重要......
    • 在哪里可以找到错误处理程序? not enough arguments for constructor AssetsBuilder: (errorHandler: play.api.http.HttpErrorHandler)controllers.AssetsBuilder.
    • 我没有提到它,但是是的,您必须将此行添加到根模块的路由文件中。我刚刚编辑了我的答案
    • 您的回答对我很有帮助。但是,我建议研究两个细节:a)最后的路线缺少斜线,对吗?应该是“->/submodule.routes”。 b) 'object Assets ...' 暗示不使用 InjectedRoutesGenerator 设置,现在(Play 2.4)推荐。使用 InjectedRoutesGenerator 它需要是 'class Assets ...' 才能编译。
    • @akauppi point b) 您的评论帮助我解决了stackoverflow.com/questions/33985108/… 中所述的问题,请随意将其作为我问题的答案,我很乐意承认。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多