Play 2.1アプリケーション内から、アプリケーションが実行されているモードをプログラムでどのように判断しますか(つまり、開発と製品)?
たとえば、テンプレート内から次のようなことができると便利です。
<p>@if(__some_play_API_call__ == Dev) { <b>Development mode</b> }</p>
Play 2.0 APIのドキュメントには、play.api.Application
のmode
プロパティがあるようですclass ...しかし、どのように取得するかわかりません- インスタンス現在実行中のアプリケーションの。
次の方法で現在のアプリケーションにアクセスできます
play.api.Play.current()
モードを調べるには
play.api.Play.current().mode()
または単に使用する
play.api.Play.isDev(play.api.Play.current())
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 のように暗黙的な変数を使用する必要はありません。
Play 2.5、Play 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.
*/
Play 2.3.Xでは、次の方法でも確認できます。
play.Play.isProd()
play.Play.isDev()
play.Play.isTest()
Play 2.5ではScalaを使用してcontext.environment.mode
からのEnumeration
の値play.api.Mode
のいずれかの値Dev, Test, Prod
。
コンパイル時の依存関係注入のために、アプリローダーでcontext
を利用できます。BuiltInComponentsFromContext
を拡張すると、直接使用(注入)できますenvironment.mode
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.isDev
、env.isProd
など pmeで言及 、機能しなくなりました。