在 Playframework2 中,如何提供多个资产目录?
In Playframework2, how to serve multiple asset directory?
资源目录有两个,一个是/ui/dist
,一个是/public
。我试着这样写路线:
GET /assets/*file controllers.Assets.at(path="/public", file)
GET /ui/*file controllers.Assets.at(path="/ui/dist", file)
但是编译的时候会报错:
[error] Unspecified value parameter file.
[error] <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
有没有人知道如何解决这个问题...
尝试为每个创建一个单独的路由器对象:
package controllers
object PublicAssets extends controllers.AssetsBuilder
object UiDistAssets extends controllers.AssetsBuilder
然后在你的路线中:
GET /assets/*file controllers.PublicAssets.at(path="/public", file)
GET /ui/*file controllers.UiDistAssets.at(path="/ui/dist", file)
我认为在您的尝试中发生的事情是反向路由器正在为您的 public 路由生成一个对象,然后另一个与 ui 路由同名的对象将覆盖第一个(如果有人知道更准确,请纠正我。)解决方案应该是将您的资产 类 命名为不同的名称,因此生成的反向路由同样具有不同的名称(或者,将它们称为相同的名称,但将它们放在不同的包。)
我发现关键是给routes.Assets.at
传入另一个参数,下面是来自playframeworkAsset document
GET /javascripts/*file Assets.at("public/javascripts", file)
GET /images/*file Assets.at("public/images", file)
那么在使用反向路由器时,您需要同时指定这两个参数:
<script src="@routes.Assets.at("public/javascripts", "jquery.js")"></script>
<image src="@routes.Assets.at("public/images", "logo.png")">
资源目录有两个,一个是/ui/dist
,一个是/public
。我试着这样写路线:
GET /assets/*file controllers.Assets.at(path="/public", file)
GET /ui/*file controllers.Assets.at(path="/ui/dist", file)
但是编译的时候会报错:
[error] Unspecified value parameter file.
[error] <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
有没有人知道如何解决这个问题...
尝试为每个创建一个单独的路由器对象:
package controllers
object PublicAssets extends controllers.AssetsBuilder
object UiDistAssets extends controllers.AssetsBuilder
然后在你的路线中:
GET /assets/*file controllers.PublicAssets.at(path="/public", file)
GET /ui/*file controllers.UiDistAssets.at(path="/ui/dist", file)
我认为在您的尝试中发生的事情是反向路由器正在为您的 public 路由生成一个对象,然后另一个与 ui 路由同名的对象将覆盖第一个(如果有人知道更准确,请纠正我。)解决方案应该是将您的资产 类 命名为不同的名称,因此生成的反向路由同样具有不同的名称(或者,将它们称为相同的名称,但将它们放在不同的包。)
我发现关键是给routes.Assets.at
传入另一个参数,下面是来自playframeworkAsset document
GET /javascripts/*file Assets.at("public/javascripts", file)
GET /images/*file Assets.at("public/images", file)
那么在使用反向路由器时,您需要同时指定这两个参数:
<script src="@routes.Assets.at("public/javascripts", "jquery.js")"></script>
<image src="@routes.Assets.at("public/images", "logo.png")">