我可以在Play Framework上的模板/视图中调用会话吗?

wyn*_*nch 11 scala playframework playframework-2.0

我是使用Play Framework 2.0的新手(我正在使用Scala)并对会话有疑问.

我来自Ruby on Rails背景,因此我倾向于考虑我在Play Framework中学习的关于Ruby on Rails的所有内容.

考虑到这一点,当我在视图中时,有没有办法让我调用存储在Session中的东西?

如果我在会话中存储了"hello" - >"world",我希望能够执行类似@ session.get("hello")的操作,并且能够在视图中使用"world".这可能吗?

我看到的另一个选项是将值存储在控制器中的变量中,并通过执行类似OK(var)的操作将其传递给视图,但这种方式似乎有点笨重,特别是如果我开始使用更多变量.

谢谢!

Jam*_*ard 22

Play中的会话存储在cookie中,实际上仅用于交叉请求数据.如果这是您想要的,那么您可以使用@session.get("hello")但实际上您可能会想到的是将一些东西从控制器传递到模板而不必将它们指定为参数的方法.在这种情况下,请在此处查看该问题的非常详细的答案:https: //stackoverflow.com/a/9632085/77409


bie*_*ior 11

是的,您可以@session.get("hello")在模板中使用,但是当使用带有Scala控制器的模板时,您看起来需要在模板的开头至少指定名为'session'的隐式参数:

@()(implicit session: play.api.mvc.Session) 
Run Code Online (Sandbox Code Playgroud)

还有flash范围 - 它不同于session它只存在一个请求并且没有签名.因此它最常用于传输错误/ inf消息.

请参阅会话和Flash范围文档

最后,由于每个模板只是一个Scala函数,您还可以从控制器调用一些操作并检索会话数据