2012-08-12 9 views

risposta

5

ho chiesto alla play's discussion group e ci hanno aiutato a realizzare questa versione iniziale

creo un PrefixedRequest come questo

import play.api.mvc.RequestHeader 
import play.api.Play.configuration 

import play.api.Play.current 

class PrefixedRequest(request: RequestHeader) extends RequestHeader { 

    def headers = request.headers 
    def queryString = request.queryString 

    // strip first part of path and uri if it matches http.path config 
    def path = ("^" + prefix).r.replaceFirstIn(request.path, "/") 
    def uri = ("^" + prefix).r.replaceFirstIn(request.uri, "/") 

    def method = request.method 
    def remoteAddress = request.remoteAddress 

    lazy val prefix = { 
     val config = configuration.getString("http.path").getOrElse("") 
     if (config.endsWith("/")) config else config + "/" 
    } 
} 

object PrefixedRequest { 
    def apply(request: RequestHeader) = new PrefixedRequest(request) 
} 

Poi l'ho usato in Global.scala

import play.api.GlobalSettings 
import play.api.mvc.RequestHeader 
import play.api.mvc.Handler 

object Global extends GlobalSettings { 

    override def onRouteRequest(request: RequestHeader): Option[Handler] = { 
    super.onRouteRequest(PrefixedRequest(request)) 
    } 

} 

finnally aggiunto this to application.conf

http.path=/prefix/ 

Sembra funzionare, ma non ho scoperto come aggiungere quel prefisso alle rotte invertite ... qualcuno può darmi una mano su quella parte?

-

Alcuni link utili

Controllare questo thread e il docs

+0

a quanto pare, queste funzionalità non sarà incluso prima della versione 2.1 - https://github.com/playframework/Play20/commit/da6bbc4 – opensas

+0

Potrebbe essere grande per i18n (/ fr,/en ...) – iwalktheline

+1

I pensa che sarebbe meglio estendere http://www.playframework.org/documentation/api/2.0/scala/play/api/mvc/WrappedRequest.html – Drew

25

In Play 2.1 è possibile farlo con la seguente opzione in conf/application.conf:

application.context="/your/prefix" 

da Play 2.4 questa proprietà si chiama play.http.context (tratto dal commento di Gman).

+1

Questo è molto più semplice della risposta accettata (che potrebbe non aver funzionato in gioco 2.0) – Nathan

+0

Questa è la risposta corretta –

+3

Solo per far sapere ad altre persone che provengono da google, nel gioco 2.4 è cambiato in 'play.http.context' (vedere https://www.playframework.com/documentation/2.4. x/Migration24) – Gman

Problemi correlati