2015-09-15 8 views
5

Questa domanda precedente può servire come base per quello che "sottomoduli" si intendono, ai fini della discussione in corso: Play Framework [2.4.x] Working with Sub Modulesquadro Riproduzione [2.4.x] come affrontare beni pubblici nel file di instradamento di un modulo sub

Se capire un sottomodulo di Play quindi dato quel contesto come si entra nella voce di instradamento sul sottomodulo per esporre le risorse da una cartella "pubblica"?

Ogni volta che provo a fare una voce di base (come segue) il mio intero modulo radice non riesce a compilare una singola route e tuttavia non ottengo nessun errore "utilizzabile" o altro indicatore di cosa potrebbe essere successo.

GET /assets/*file controllers.Assets.at(path="/public", file) 

Gli errori del compilatore si verificano anche se commento la voce nel progetto root.

come tutti i miei moduli secondari controllori hanno un prefisso ho provato che (ovviamente)

GET /assets/*file controllers.submodule.Assets.at(path="/public", file) 

Ahimè che non funziona neanche, ma almeno ottengo un errore utile raccontare me il type Assets is not a member of package controllers.submodule

Eventuali suggerimenti?

PS: Sì, ho anche provato a prendere l'ingresso di file di routing del radice nel caso in cui era solo uno spazio nome di collisione ...

risposta

4

È necessario creare un controller Assets nel pacchetto controllori modulo:

package controllers.submodule 

class Assets extends AssetsBuilder(DefaultHttpErrorHandler) 

quindi dichiarare un percorso per questo controller nel file router (dovrebbe essere chiamato submodule.routes) del modulo:

GET /submodule/public/*file controllers.submodule.Assets.versioned(path="/public", file: Asset) 

E 'meglio prefisso il percorso con il nome del tuo sottomodulo per evitare la rotta del percorso nel caso in cui tu abbia un altro nome di sottomodulo con la voce di rotta statica.

Ancora una cosa: tutti i file statici sono ospitati nella cartella "lib" del modulo principale:

lib/submodule/css... 
lib/submodule/js... 

quindi bisogna aggiornare le vostre opinioni del genere:

<script type="text/javascript" src="@controllers.submodule.routes.Assets.versioned("lib/submodule/js/your-submodule-script.js")"></script> 

EDIT: non dimenticare di aggiungere questo al file di percorso (percorsi denominati) del modulo root

->/submodule.routes 
+0

Nel file delle rotte principali (le rotte si sentono per il progetto principale) ho questo piccolo gioiello: '->/submoduleNAME submodule.Routes' che fornisce essenzialmente un alias del submodule dalla prospettiva esterna. Curioso sul fatto che si applichi o meno, ma a voce alta sospetto che non importi nemmeno ... – Techmag

+0

E dove si può trovare il gestore degli errori? 'argomenti non sufficienti per il costruttore AssetsBuilder: (errorHandler: play.api.http.HttpErrorHandler) controllers.AssetsBuilder. – Techmag

+0

Non l'ho menzionato ma si deve aggiungere questa linea al file di percorso del modulo root. Ho appena modificato la mia risposta – Maxime

Problemi correlati