Play Framework 2.4在Scala模板中使用注入变量

Play Framework 2.4在Scala模板中使用注入变量,scala,playframework,playframework-2.4,Scala,Playframework,Playframework 2.4,我想在我的网页的菜单栏中显示数据库中的一些数据。为了获取数据,我有一个数据访问对象(DAO),它通常是通过Guice注入创建的 如何在Scala模板中使用这种(注入的)对象? 我可以将其作为参数传递给模板,但我必须在每个页面上都这样做(因为它应该显示在菜单栏中)。我正在寻找另一种解决方案,我不必在任何地方都通过它。目前,我正在模板内创建一个新对象,无论何时渲染它(这使我的代码更干净,但性能更差)。您可以不费吹灰之力地伪造它 首先,创建一个Scala对象,该对象提供对DAO的访问(它可以包含您想要

我想在我的网页的菜单栏中显示数据库中的一些数据。为了获取数据,我有一个数据访问对象(DAO),它通常是通过Guice注入创建的

如何在Scala模板中使用这种(注入的)对象?


我可以将其作为参数传递给模板,但我必须在每个页面上都这样做(因为它应该显示在菜单栏中)。我正在寻找另一种解决方案,我不必在任何地方都通过它。目前,我正在模板内创建一个新对象,无论何时渲染它(这使我的代码更干净,但性能更差)。

您可以不费吹灰之力地伪造它

首先,创建一个Scala对象,该对象提供对DAO的访问(它可以包含您想要的任何内容,只需在顶级对象和隐式对象中重复该模式即可)

在您的视图中,您可以将隐式ITS对象导入到模板中,并获得由Guice创建的DAO

@import com.example.stuff.ViewAccessPoint.Implicits._
@import play.api.Play.current

myDao.whatever()
这适用于Java和Scala项目

您可以在这里实际看到这一点:


在一个旁注下,我会考虑如果你真的想在你的模板层中进行数据访问。

我不认为有一种直接的方式来实现你想要的,但是我认为答案可以帮助。你可以在单独的模板中抽象菜单条以避免在每个模板中传递参数吗?@ BhashitParikh:谢谢链接。这确实是一个可行的选择。但是,仍然不是我想要的。@Adi:我的菜单栏模板已经在一个单独的模板中了。不过,我是从所有其他模板调用它的,因此必须通过它们提供参数。谢谢,你刚才为我节省了很多时间,不必将对象传递到100多个模板。在你的模板中,你还需要
@import play.api.play.current
来实现这一点。@Itchy我正在尝试做同样的事情,我收到一条编译器警告,不推荐使用
@import play.api.play.current
。你知道如何使用DI来实现这一点吗?我用的是播放2.5btw@RyanStull虽然不推荐使用,但您仍然需要这样做。我认为从2.6版开始,将支持模板的DI。或者,您可以使用twirl 1.2-有关详细信息,请参阅。
@import com.example.stuff.ViewAccessPoint.Implicits._
@import play.api.Play.current

myDao.whatever()