【问题标题】:How is Playframework's Session injected into the Action?Playframework 的 Session 是如何注入到 Action 中的?
【发布时间】:2014-10-29 19:55:57
【问题描述】:

我正在尝试编写自己的操作并隐式传入 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

【问题讨论】:

  • 您尝试过 Play Slick 插件吗? github.com/playframework/play-slick
  • 是的,我有,但我需要将 DBAction 与我的 on AuthAction 混合以进行身份​​验证。所以这就是为什么我需要理解这个概念来构建自己的概念。
  • 你能分享 DBAction 和 AuthAction 的签名吗?
  • 对不起,我不理解你分享签名的意思。你的意思是把动作组合在一起吗?维基说:github.com/playframework/play-slick/wiki/Usage
  • 您似乎将 Play Session 与光滑的 db Session 混淆了。它们根本不是一回事。

标签: scala slick playframework-2.3 implicits


【解决方案1】:

经过一番努力,我找到了自己问题的解决方案。

秘密在于Controller,它有一个隐含的def:

implicit def request2session(implicit request: RequestHeader): Session

PlayFramework,你真聪明!

【讨论】:

    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多