33

在 Play 2.1 应用程序中,我将如何以编程方式确定应用程序在哪种模式下运行(即DevelopmentProduction)?

例如,能够从模板内部执行以下操作会很有用:

<p>@if(__some_play_API_call__ == Dev) { <b>Development mode</b> }</p>

在 Play 2.0 API 文档中,似乎有一个mode的属性......但是,我不确定如何获取当前正在运行的应用程序的实例play.api.Application

4

6 回答 6

48

您可以通过以下方式访问当前应用程序

play.api.Play.current()

找出模式尝试

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

或简单地使用

play.api.Play.isDev(play.api.Play.current())
于 2013-01-30T20:40:54.890 回答
18

在 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()) {
          ...
        }
    }
}

或者等效地在 Scala 中:

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

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

}

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

于 2016-08-07T16:52:27.467 回答
13

使用Play 2.5Play 2.6Play 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.6Play 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.
 */
于 2018-03-07T10:57:57.393 回答
10

在 play 2.3.X 中,您还可以通过以下方式检查:

play.Play.isProd()
play.Play.isDev()
play.Play.isTest()
于 2015-10-22T13:52:19.490 回答
5

在使用 Scala 的 Play 2.5 中,有一个context.environment.mode值为Enumerationfromplay.api.Mode和其中一个值Dev, Test, Prod
对于编译时依赖注入,您context可以在应用程序加载器中使用,如果您扩展,BuiltInComponentsFromContext则可以直接使用 (inject)environment.mode

于 2016-08-21T15:00:12.667 回答
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中, pme 提到env.isDev的方法,env.isProd等不再起作用。

于 2018-10-11T08:31:12.517 回答