0

独自のアクションを記述して、DatabaseSession を暗黙的に渡そうとしています。ただし、せいぜいコントローラーでこのようなことを行うことができます。

def index = MyAction { implicit myRequest =>
  implicit val dbss = myRequest.databaseSession
  aClass.someMethod() // requires an implicit DatabaseSession
}

playframework では、次のようにセッションにアクセスできます。

def index = Action { implicit request =>
  val someOption = session.get("something")
  // OR
  aClass.doSomething() // requires an implicit Session
}

ここでわかるように、リクエストのみが暗黙的に渡された場合、セッションに直接アクセスできます。では、セッションはどこから来るのでしょうか。また、Session と同じように DatabaseSession を渡すにはどうすればよいでしょうか? 私が書く必要がないように:

implicit val dbss = myRequest.databaseSession

slick は dbSession を暗黙的に渡すことができるため、これが可能であることはわかっています。しかし、私は彼らがそれをどのように行うかを理解できないようです.

https://github.com/playframework/play-slick/blob/master/code/src/main/scala/play/api/db/slick/DBAction.scala

完全に混乱しています!=S

4

1 に答える 1

1

一生懸命掘り下げた後、私は自分の質問に対する解決策を見つけました。

その秘密は、暗黙的な定義を持つコントローラーにあります。

implicit def request2session(implicit request: RequestHeader): Session

PlayFramework さん、賢いですね。

于 2014-10-29T11:55:57.527 に答える