4

Play 2 の Java フレーバーにはGlobalSettings.onRequestがあり、これを使用してコントローラーへのすべての着信要求をインターセプトできます。しかし、同等の Scalaには onRequest ハンドラはありません。

これは、Java で必要なアクション委譲ロジックが Scala では必要ないためだと思われますが、受信するコントローラー要求ごとにコードを実行したいので、かなり面倒です。

Scala + Play 2 アプリですべてのコントローラー要求をインターセプトする方法を知っている人はいますか?

4

2 に答える 2

6

Global オブジェクトのoverridedef onRouteRequest (request: RequestHeader): Option[Handler]が探している答えかもしれません。

2.0.4 API からは、HTTP リクエストを受信したときに呼び出されます。

于 2013-01-03T01:33:47.840 に答える
2

アクション合成が使えます。Play 2.4 ドキュメント ( https://www.playframework.com/documentation/2.4.x/ScalaActionsComposition ) から:

import play.api.mvc._

object LoggingAction extends ActionBuilder[Request] {
  def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
    Logger.info("Calling action")
    block(request)
  }
}

次に、コントローラーで:

def index = LoggingAction {
  Ok("Hello World")
}

これは、リクエストごとにコードを実行する必要があるときに行うことです。そして実際には、カスタムアクションを使用するかどうかによって、これが実行されるリクエストを制御できます。

def index = Action {
  Ok("Hello World")
}

これがお役に立てば幸いです。

編集

あなたが 2.0 準拠のソリューションを望んでいることを読みました。これは Play 2.0 で利用できます。これはドキュメントです: https://www.playframework.com/documentation/2.0.x/ScalaActionsComposition

于 2016-06-09T16:06:17.790 に答える