2012-08-12 3 views

Antwort

5

ich play's discussion group gefragt und sie hat mir geholfen, diese erste Version

zu erreichen erstelle ich eine PrefixedRequest wie diese

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

Dann habe ich es 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 hinzugefügt dies zu application.conf

http.path=/prefix/ 

Es scheint zu funktionieren, aber ich konnte nicht herausfinden, wie man den umgekehrten Routen dieses Präfix hinzufügt ... kann jemand eine Hand auf diesem Teil geben?

-

einige nützliche Links

prüfen diese thread und die docs

+0

anscheinend, diese Funktion wird nicht vor Version 2.1 enthalten sein - https://github.com/playframework/Play20/commit/da6bbc4 – opensas

+0

Es könnte gut für i18n sein (/ fr,/en ...) – iwalktheline

+1

I denke, du wärst besser dran, http://www.playframework.org/documentation/api/2.0/scala/play/api/mvc/WrappedRequest.html – Drew

25

Im Play 2.1 können Sie das tun mit der folgenden Option in conf/application.conf:

application.context="/your/prefix" 

aus dem Spiel 2.4 Diese Eigenschaft heißt play.http.context (entnommen aus dem Kommentar von Gman).

+1

Dies ist viel einfacher als die angenommene Antwort (die möglicherweise nicht funktioniert haben im Spiel 2.0) – Nathan

+0

Dies ist die richtige Antwort –

+3

Nur um andere Leute von Google wissen zu lassen, in Play 2.4 hat es sich geändert zu 'play.http.context' (siehe https://www.playframework.com/documentation/2.4. x/Migration24) – Gman

Verwandte Themen