使用Play Framework 2.0.4,我想以不同的方式定义静态内容URL。
在DEV模式下,它将是/ public / {here},因此使用默认配置
GET /public/*file controllers.Assets.at(path="/public", file)
很好,但在PROD中,我想使用http://static.mydomain.com/基本网址。
起初,我考虑过像这样更改资产:
GET /public/*file controllers.Assets.at(path="http://static.mydomain.com/", file)
但当然,我不行:p
所以我在考虑使用一个静态方法,该方法会在application.conf
文件中查找application.staticBaseUrl
参数,并返回/public/{here}
或http://static.mydomain.com/{here}
或任何定义的内容在application.conf参数中。
但是我不确定这是不是最好的方式,如果还没有更好的方法,那也不是。
你能指导我吗?
谢谢:)
答案 0 :(得分:1)
您可以在Application
控制器中添加静态包装器:
public static String wrapLink(play.mvc.Call uri) {
return wrapLink(uri.toString());
}
public static String wrapLink(String uri) {
return (Play.application().isDev()) ? "/public" + uri : "http://domain.tld" + uri;
}
因此您可以在视图中使用它:
link from String:
@Application.wrapLink("/bootstrap/css/bootstrap.min.css")
or from Call
@Application.wrapLink(routes.Application.index)
我在使用多个CDN时也使用了扩展版本(即使用虚拟子域-CDN来加快资源下载速度):
Application.conf
cdn.cdn1="http://cdn1.domain.tld"
cdn.cdn2="http://cdn2.domain.tld"
控制器:
public static String wrapLink(String cdnId, String uri) {
return (Play.application().isDev())
? "/public" + uri
: Play.application().configuration().getString("cdn."+cdnId)+ uri;
}
视图:
@Application.wrapLink("cdn1", "/bootstrap/css/bootstrap.min.css")
@Application.wrapLink("cdn2", "/images/abc.jpg")