Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[platform-play] TwirlCompiler support for dependency injection with templates

Aperta
#83 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
scala
Ambito
build-system

Direzione di ricerca

Inizia dal punto di ingresso di TwirlCompiler e dalla configurazione sourceSets suggerita in build.gradle, usando come comportamento di riferimento l'esempio collegato di dependency injection per Scala templates. La classe template generata dovrebbe accettare dipendenze del costruttore e avere l'annotazione configurata @javax.inject.Inject(), consentendo ai controller di iniettarla e invocarla come mostrato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Twirl templates can be generated as a class rather than a static object by declaring a constructor using a special @this(args) syntax at the top of the template. This means that Twirl templates can be injected into controllers directly and can manage their own dependencies, rather than the controller having to manage dependencies not only for itself, but also for the templates it has to render.

Reference: https://www.playframework.com/documentation/2.6.x/ScalaTemplatesDependencyInjection

Expected Behavior

Using the examples in reference site:

trait Summarizer {
  /** Provide short form of string if over a certain length */
  def summarize(item: String)
}

Template:

@this(summarizer: Summarizer)
@(item: String)

@{summarizer.summarize(item)}

Controller:

class MyController @Inject()(template: views.html.IndexTemplate, 
                              cc: ControllerComponents) 
  extends AbstractController(cc) {
  
  def index = Action { implicit request =>
    val item = \"some extremely long text\"
    Ok(template(item))
  }
}

The generated class should be:

class IndexTemplate @javax.inject.Inject() /*2.18*/(summarizer: models.Summarizer) extends _root_.play.twirl.api.BaseScalaTemplate[play.twirl.api.HtmlFormat.Appendable,_root_.play.twirl.api.Format[play.twirl.api.HtmlFormat.Appendable]](play.twirl.api.HtmlFormat) with _root_.play.twirl.api.Template1[String,play.twirl.api.HtmlFormat.Appendable] {

  /**/
  def apply/*3.14*/(item: String):play.twirl.api.HtmlFormat.Appendable = {
    _display_ {
      {


Seq[Any](format.raw/*3.28*/("""

            """),_display_(/*5.14*/{summarizer.summarize(item)}),format.raw/*5.42*/("""
        """))
      }
    }
  }

  def render(item:String): play.twirl.api.HtmlFormat.Appendable = apply(item)

  def f:((String) => play.twirl.api.HtmlFormat.Appendable) = (item) => apply(item)

  def ref: this.type = this

}

So the class generated is annotated with @Inject class IndexTemplate @javax.inject.Inject() /*2.18*/(summarizer: models.Summarizer)

Current Behavior

The current version of gradle-plataform-play does not support dependency injection.

Suggestions
Configuration
  • build.gradle
        sourceSets {
                main {
                    twirl{
                        constructorAnnotations = [ '@javax.inject.Inject()']
                    }
                }
            }
Lingua principale
Java
Stelle
47
Fork
42
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di gradle/playframework

Tutte le issue di gradle/playframework

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.