在模板中播放2.0访问请求

tmb*_*gmn 12 session templates playframework-2.0

我有以下简化的模板设置:

  • 主要(模板)
    • 主页
    • 细节

现在,当用户登录时,会username设置会话属性,以便我可以确定用户是否已登录.为了帮助我弄清楚用户是否登录,我有以下会话助手对象:

object SessionHelper {
  val sessionKey = "username"

  def authenticated(implicit request: RequestHeader) = {
    request.session.get(sessionKey).exists(_ => true)
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以在采用implicit请求对象的模板中使用,例如:

(implicit request: play.api.mvc.RequestHeader)
...
@if(SessionHelper.authenticated) {
    <strong>Authenticated!</strong>
}
...
Run Code Online (Sandbox Code Playgroud)

因为 - 据我所知 - 这是在模板中获取隐式变量的唯一方法,这意味着在渲染视图的任何地方,我都需要显式"定义"隐式请求变量.例如:

def index = Action { implicit request =>
  Ok(views.html.index(myStuff))
}
Run Code Online (Sandbox Code Playgroud)

没有该implicit request =>语句,它不会编译.虽然这有点尴尬,只要我留在任何"子视图"(例如主页或详细信息)中,这很好,因为对于每个视图我都有一个控制器方法,因此也可以访问隐式RequestHeader实例.但是,当我需要访问我的模板(例如Main)中的会话时,这不起作用,因为它永远不会被控制器显式呈现.

我没有立即看到一种方法来访问模板中的会话,而快速谷歌除了几个关于相同主题的问题之外没有透露任何其他问题.有任何想法吗?

更新:似乎这与此问题有些相关.

Per*_*ega 8

除了Play Framework 2.0之外,没有办法在所有模板周围传递隐式请求.

您在更新中添加的链接是仅在1个对象中围绕模板移动更多数据,但您仍需要在任何地方声明隐式参数.