2014-10-29 8 views
0

Я пытаюсь написать свое собственное действие и неявно передать в DatabaseSession. Однако в лучшем случае я могу сделать что-то подобное в моем контроллере.Как сеанс Playframework вводится в действие?

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 
} 

Здесь, как мы видим, можно непосредственно получить доступ к сессии, когда только запрос передается как неявный. Итак, откуда проходит сессия? И как я смогу пройти в моем DatabaseSession так же, как Session? Так что я не должен писать:

implicit val dbss = myRequest.databaseSession 

Я знаю, что это возможно, потому что пятно может пройти в их dbSession неявно. Но я не могу понять, как они это делают.

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

Полностью запутался! = S

+0

Вы пробовали Play Slick плагин? https://github.com/playframework/play-slick – tuxdna

+0

Да, у меня есть, но мне нужно было смешать DBAction с моим в AuthAction для аутентификации. Вот почему мне нужно понять эту концепцию, чтобы построить свою собственную. –

+0

Можете ли вы поделиться подписью как DBAction, так и AuthAction? – tuxdna

ответ

1

После некоторого трудного рытья я нашел решение своего вопроса.

Секрет заключается в контроллере, который имеет неявный DEF:

implicit def request2session(implicit request: RequestHeader): Session 

PlayFramework, ты умный!