2012-08-12 42 views

Respuesta

5

pregunté en play's discussion group y ellos me ayudaron a lograr esta versión inicial

creo un PrefixedRequest como esto

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) 
} 

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)) 
    } 

} 

añade Conviene por último garantizar

Entonces utilicé en Global.scala esto a application.conf

http.path=/prefix/ 

Parece que funciona, pero no puedo encontrar cómo agregar ese prefijo a las rutas invertidas ... ¿Alguien puede echarle una mano en esa parte?

-

Algunos enlaces útiles

Marque esta thread y la docs

+0

aparentemente, estas características no se incluirán antes de la versión 2.1 - https://github.com/playframework/Play20/commit/da6bbc4 – opensas

+0

Podría ser genial para i18n (/ fr,/es ...) – iwalktheline

+1

I cree que sería mejor extender http://www.playframework.org/documentation/api/2.0/scala/play/api/mvc/WrappedRequest.html – Drew

25

En juego 2.1 se puede hacer eso con la siguiente opción en conf/application.conf:

application.context="/your/prefix" 

De Juego 2.4 esta propiedad se llama play.http.context (tomada del comentario de Gman).

+1

Esto es mucho más fácil que la respuesta aceptada (que puede no haber funcionado) en juego 2.0) – Nathan

+0

Esta es la respuesta correcta –

+3

Para que otras personas provenientes de Google sepan, en el juego 2.4 se cambió a 'play.http.context' (ver https://www.playframework.com/documentation/2.4. x/Migration24) – Gman

Cuestiones relacionadas