twirl starter play new framework scala playframework playframework-2.4

starter - Play Framework 2.4 usa la variable inyectada en la plantilla de Scala



scala play seed (1)

Me gustaría mostrar algunos datos de la base de datos en la barra de menú de mi página web. Para obtener los datos, tengo un objeto de acceso a datos (DAO) que generalmente se crea con la inyección de Guice.

¿Cómo puedo usar dicho objeto (inyectado) en mis plantillas de Scala?

Podría pasarlo como un parámetro a la plantilla, pero tenía que hacer esto en cada página (porque debería mostrarse en la barra de menú). Estoy buscando otra solución donde no tenga que pasarla a todas partes. Actualmente estoy creando un nuevo objeto dentro de la plantilla, siempre que se represente (lo que me da un código más limpio pero un peor rendimiento).


Puedes simular esto sin demasiado esfuerzo.

Primero, cree un objeto Scala que proporcione acceso a su DAO (esto puede contener tantas cosas como desee, simplemente repita el patrón dentro del objeto de nivel superior y el objeto Implicits).

package com.example.stuff object ViewAccessPoint { private[stuff] val myDaoCache = Application.instanceCache[MyDao] object Implicits { implicit def myDao(implicit application: Application): MyDao = myDaoCache(application) } }

En su opinión, puede importar el objeto Implicits en su plantilla y obtener el DAO creado por Guice.

@import com.example.stuff.ViewAccessPoint.Implicits._ @import play.api.Play.current myDao.whatever()

Esto funciona tanto para proyectos de Java como de Scala.

Puedes ver esto en práctica aquí:

En una nota lateral, lo consideraría si realmente quieres acceder a los datos en tu capa de plantilla.