Play Framework [2.4.x] 如何处理子模块路由文件中的 public 资产
Play Framework [2.4.x] how to address public assets in a sub module's routing file
前一个问题可以作为 "submodules" 对当前讨论的意义的基线:
如果您了解 Play 子模块,那么在给定上下文的情况下,如何进入子模块上的路由条目以公开 "public" 文件夹中的资产?
每当我尝试进行基本输入(如下所示)时,我的整个根模块都无法编译单个路由,但我没有收到任何 "usable" 错误或其他关于可能发生的事情的指示。
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: 是的,我也试过从 root 的路由文件中取出条目,以防它只是一个名称 space 冲突...
您必须在子模块控制器包中创建一个资产控制器:
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
前一个问题可以作为 "submodules" 对当前讨论的意义的基线:
如果您了解 Play 子模块,那么在给定上下文的情况下,如何进入子模块上的路由条目以公开 "public" 文件夹中的资产?
每当我尝试进行基本输入(如下所示)时,我的整个根模块都无法编译单个路由,但我没有收到任何 "usable" 错误或其他关于可能发生的事情的指示。
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: 是的,我也试过从 root 的路由文件中取出条目,以防它只是一个名称 space 冲突...
您必须在子模块控制器包中创建一个资产控制器:
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