web-dev-qa-db-fra.com

Comment détecter le mode d'application dans Play 2.x

À partir d’une application Play 2.1, comment puis-je déterminer par programme le mode dans lequel l’application s’exécute (c.-à-d., Développement vs. Production )?

Par exemple, il serait utile de pouvoir faire quelque chose comme ceci à l'intérieur d'un modèle:

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

Dans la documentation de l'API Play 2.0, il semble y avoir une propriété mode de la play.api.Application class ... cependant, je ne suis pas sûr de savoir comment accéder à instance de l'application en cours d'exécution.

32
kes

Vous pouvez accéder à l’application actuelle via

play.api.Play.current()

pour découvrir le mode essayer

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

ou simplement utiliser

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

Dans Play 2.5.x, la méthode play.Play.isDev() est obsolète, il faut utiliser dependency injection :

import javax.inject.Inject;

public class Example {

    @Inject
    private play.Environment environment;

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

Ou équivalent en Scala:

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

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

}

environment.isDev() renvoie un booléen, que l’on peut facilement passer à un modèle. Pas besoin d'utiliser des variables implicites comme décrit ici .

16
koppor

Dans le jeu 2.3.X, vous pouvez également vérifier via:

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

Avec Play 2.5 et Play 2.6

Vous pouvez le faire comme ça:

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

}

Ou dans Play 2.6 vous avez aussi la version avec 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}")

}
9
pme

Dans Play 2.5 à l'aide de Scala, il existe une valeur context.environment.mode de Enumeration à partir de play.api.Mode avec l'une des valeurs Dev, Test, Prod.
Pour l’injection de dépendance au temps de compilation, vous avez context disponible dans votre chargeur d’applications et si vous étendez BuiltInComponentsFromContext, vous pouvez utiliser (injecter) directement environment.mode

5
icl7126

Dans Jouez 2.6 , injectez une instance Environment et utilisez son champ mode: une des valeurs de play.api.Mode enum.

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

}

Au moins dans Play 2.6.20, les méthodes env.isDev, env.isProd, etc., mentionnées par pme , ne fonctionnent plus.

0
Jonik