如何在Play Framework 2中为我的所有路由添加前缀?

ope*_*sas 7 scala routes playframework playframework-2.0

在play 1.x中你有了http.path param,它允许你设置一个url来添加到每个路由

http.param

我怎样才能在游戏2.0中实现类似的功能?

ree*_*een 28

在Play 2.1中,您可以使用以下选项执行此操作conf/application.conf:

application.context="/your/prefix"
Run Code Online (Sandbox Code Playgroud)

从Play 2.4开始,这个属性被调用play.http.context(取自Gman的评论).

  • 只是为了让其他人来谷歌知道,在游戏2.4中,它改为`play.http.context`(参见https://www.playframework.com/documentation/2.4.x/Migration24) (4认同)

ope*_*sas 6

我在play的讨论组问过,他们帮助我实现了这个初始版本

我像这样创建一个PrefixedRequest

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)
}
Run Code Online (Sandbox Code Playgroud)

然后我在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))
  }

}
Run Code Online (Sandbox Code Playgroud)

最后将其添加到application.conf中

http.path=/prefix/
Run Code Online (Sandbox Code Playgroud)

它似乎工作,但我不知道如何将这个前缀添加到反向路线...任何人都可以在那一部分上手?

-

一些有用的链接

检查此主题文档