À 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.
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())
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 .
Dans le jeu 2.3.X, vous pouvez également vérifier via:
play.Play.isProd()
play.Play.isDev()
play.Play.isTest()
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}")
}
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
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.