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

时间:2013-01-30 20:31:32

标签: 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属性...但是,我不确定如何进入当前正在运行的应用程序的实例

6 个答案:

答案 0 :(得分:47)

您可以通过

访问当前的应用程序
play.api.Play.current()

找出模式试试

play.api.Play.current().mode()

或只是使用

play.api.Play.isDev(play.api.Play.current())

答案 1 :(得分:16)

在Play 2.5.x中,不推荐使用play.Play.isDev()方法,必须使用dependency injection

import javax.inject.Inject;

public class Example {

    @Inject
    private play.Environment environment;

    public void myMethod() {
        if (environment.isDev()) {
          ...
        }
    }
}

或等同于Scala:

class ErrorHandler @Inject()(environment: Environment) {

  def myMethod() = {
    if (environment.isDev) {
      ...
    }
  }

}

environment.isDev()返回一个布尔值,可以轻松传递给模板。无需使用here所述的隐式变量。

答案 2 :(得分:10)

在游戏2.3.X中你也可以通过以下方式查看:

play.Play.isProd()
play.Play.isDev()
play.Play.isTest()

答案 3 :(得分:10)

播放2.5 播放2.6 播放2.7

你可以这样做:

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}")

}

或者在 Play 2.6 Play 2.7 中,您还拥有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}")
}

对于Scala Doc两个州:

/**
 * The environment for the application.
 *
 * Captures concerns relating to the classloader and the filesystem for the application.
 */

答案 4 :(得分:5)

在使用Scala的Play 2.5中,来自context.environment.mode的{​​{1}}值为Enumeration,其中一个值为play.api.Mode
对于编译时依赖注入,您可以在应用加载器中使用Dev, Test, Prod,如果扩展context,则可以直接使用(注入)BuiltInComponentsFromContext

答案 5 :(得分:0)

Play 2.6 中,注入一个Environment实例并使用其mode字段:play.api.Mode枚举值之一。

import javax.inject.Inject
import play.api.Environment
import play.api.Mode.Prod
import play.api.mvc.{AbstractController, ControllerComponents}

class TestController @Inject()(cc: ControllerComponents, env: Environment)
    extends AbstractController(cc) {

  def hello = Action {
    if (env.mode == Prod) {
      // ...
    }

    Ok(s"Hello world in ${env.mode} mode")
  }

}

至少在Play 2.6.20中,方法env.isDevenv.isProdmentioned by pme不再起作用。