12

我正在尝试为Play Framework 2.0创建一个插件(截至今天,2011 年 12 月 10 日,Github 中的最新代码)。插件必须在视图中呈现一些数据。为了避免强迫用户修改所有模板,我创建了一个标签来检索和呈现相关数据。

为了避免并发问题,数​​据应该与用户的标识符一起存储。此标识符只需要在请求期间有效(会话 ID、请求本身等),在请求结束后信息将被丢弃。

问题是 Request、RequestHeader 和 Session 都不能作为 Scala 模板中的隐式值使用。那么,模板中可用的隐式值有哪些

如果没有我可以使用,您对如何获取我可以从模板和控制器访问的值有任何建议(不需要用户修改控制器或模板)并且可以在 per-请求依据?

4

2 回答 2

7

我找到了

仍然可用,而 1.x 中的隐式对象errorsoutparamsplay已被删除。看起来这个列表是由play.mvc.Http.Context.Implicit确定的,它的 javadoc 说“在模板中导入以获取隐式 HTTP 上下文”。所以我相当有信心这是自动可用的完整列表。

还有一个@Messages东西似乎用1.x 的语法替换了messages隐式对象。&{'my.message.key'}它实际上是方法调用的简写,而不是隐式对象。你可以@Messages("my.message.key")调用play.Messages.get(String,Object...)@Messages("index.title")(Lang("es")) ,或者你可以强制使用某种语言,比如@Messages("index.title")(Lang("es-ar"))调用play.Messages.get(Lang,String,Object...)

于 2012-07-03T00:21:58.007 回答
5

是的,这对我来说也是一个问题......

实际上,他们可以有一个implicit,但您仍然必须将其添加到参数列表中并像在 Action 中一样声明所需的对象。implicit

这是我的做法:

模板

// **FIRST** add the needed implicit parameter to the template (the whole template will be created as a function will the related parameters, incl. curryed parameters list are handled) 
@(stuff:models.MyStuff)(implicit request: play.api.mvc.Request[Any])

@import helper._

@main("Home"){

}

控制器

object Main extends Controller {
  def index = Action {
    // **SECONDLY** declare the request as implicit.
    implicit request =>
      Ok(views.html.index(MyStuff()))
    }
}

更多的?

由于单个implicit参数有效,因此您可以将所需的对象包装在专用结构中并将其声明为implicit.

于 2012-01-18T08:55:31.313 回答