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()テンプレートに簡単に渡すことができるブール値を返します。here で説明されているように、暗黙的な変数を使用する必要はありません。

于 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.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.
 */
于 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値を持つEnumerationfromの値play.api.ModeがありますDev, Test, Prod
コンパイル時の依存性注入の場合context、アプリローダーで利用できます。拡張すると、BuiltInComponentsFromContext直接使用(注入)できますenvironment.mode

于 2016-08-21T15:00:12.667 に答える
0

Play 2.6では、Environmentインスタンスを注入し、そのフィールド ( enum 値modeの 1 つ) を使用します。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 に答える