如何在Play 2.x中检测应用程序模式

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)

  • 在游戏2.4.2中,我不得不使用`play.api.Play.current`而不是`play.api.Play.current()` (5认同)

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()返回一个布尔值,可以轻松传递给模板.无需使用此处描述的隐式变量.

  • 这个答案是正确的,但上帝这是不必要的冗长.为什么游戏会像依赖注入一样促进不安全和冗长的模式? (3认同)

pme*_*pme 11

使用Play 2.5Play 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)

  • 这一切都取决于您启动应用程序的方式.更多细节:https://www.playframework.com/documentation/2.4.x/Production (4认同)
  • 怎么玩知道它是在Dev还是Prod? (2认同)

icl*_*126 5

在播放使用2.5 Scala中存在context.environment.mode的值Enumerationplay.api.Mode与所述值中的一个Dev, Test, Prod.
对于编译时依赖注入,您context可以在app加载器中使用,如果扩展,BuiltInComponentsFromContext则可以直接使用(注入)environment.mode