web-dev-qa-db-ja.com

Play 2.xでアプリケーションモードを検出する方法

Play 2.1アプリケーション内から、アプリケーションが実行されているモードをプログラムでどのように判断しますか(つまり、開発製品)?

たとえば、テンプレート内から次のようなことができると便利です。

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

Play 2.0 APIのドキュメントには、play.api.Applicationmodeプロパティがあるようですclass ...しかし、どのように取得するかわかりません- インスタンス現在実行中のアプリケーションの。

33
kes

次の方法で現在のアプリケーションにアクセスできます

play.api.Play.current()

モードを調べるには

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

または単に使用する

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

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 のように暗黙的な変数を使用する必要はありません。

16
koppor

Play 2.5Play 2.6およびPlay 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.
 */
11
pme

Play 2.3.Xでは、次の方法でも確認できます。

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

Play 2.5ではScalaを使用してcontext.environment.modeからのEnumerationの値play.api.Modeのいずれかの値Dev, Test, Prod
コンパイル時の依存関係注入のために、アプリローダーでcontextを利用できます。BuiltInComponentsFromContextを拡張すると、直接使用(注入)できますenvironment.mode

5
icl7126

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.isProdなど pmeで言及 、機能しなくなりました。

0
Jonik