kes*_*kes 33 scala playframework playframework-2.0
在Play 2.1应用程序中,我将如何以编程方式确定应用程序运行的模式(即开发与生产)?
例如,能够从模板内部执行此类操作会很有用:
<p>@if(__some_play_API_call__ == Dev) { <b>Development mode</b> }</p>
在Play 2.0 API文档中,似乎有一个类的mode
属性...但是,我不确定如何获取当前正在运行的应用程序的实例.play.api.Application
max*_*xmc 48
您可以通过访问当前的应用程序
play.api.Play.current()
Run Code Online (Sandbox Code Playgroud)
找出模式尝试
play.api.Play.current().mode()
Run Code Online (Sandbox Code Playgroud)
或者只是使用
play.api.Play.isDev(play.api.Play.current())
Run Code Online (Sandbox Code Playgroud)
kop*_*por 16
在Play 2.5.x中,该play.Play.isDev()
方法已弃用,必须使用依赖注入:
import javax.inject.Inject;
public class Example {
@Inject
private play.Environment environment;
public void myMethod() {
if (environment.isDev()) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者等效于Scala:
class ErrorHandler @Inject()(environment: Environment) {
def myMethod() = {
if (environment.isDev) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
environment.isDev()
返回一个布尔值,可以轻松传递给模板.无需使用此处描述的隐式变量.
pme*_*pme 11
使用Play 2.5和Play 2.6
你可以这样做:
import play.Environment
class MyController @Inject()(env: Environment) {
println(s"DevMode is ${env.isDev}")
println(s"ProdMode is ${env.isProd}")
println(s"TestMode is ${env.isTest}")
}
Run Code Online (Sandbox Code Playgroud)
或者在Play 2.6中你也有以下版本play.api.Environment
:
import play.api.Environment
class MyController @Inject()(env: Environment) {
println(s"ProdMode is ${env.mode == Mode.Prod}")
println(s"DevMode is ${env.mode == Mode.Dev}")
println(s"TestMode is ${env.mode == Mode.Test}")
}
Run Code Online (Sandbox Code Playgroud)
Gus*_*Gus 10
在游戏2.3.X你也可以检查通过:
play.Play.isProd()
play.Play.isDev()
play.Play.isTest()
Run Code Online (Sandbox Code Playgroud)
在播放使用2.5 Scala中存在context.environment.mode
的值Enumeration
从play.api.Mode
与所述值中的一个Dev, Test, Prod
.
对于编译时依赖注入,您context
可以在app加载器中使用,如果扩展,BuiltInComponentsFromContext
则可以直接使用(注入)environment.mode