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

时间:2012-08-12 19:46:11

标签: scala playframework routes playframework-2.0

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

http.param

如何在游戏2.0中实现类似的功能?

2 个答案:

答案 0 :(得分:27)

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

application.context="/your/prefix"

从Play 2.4开始,此属性称为play.http.context(取自Gman的评论)。

答案 1 :(得分:5)

我在play's discussion group询问他们帮助我实现了这个初始版本

我像这样创建一个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)
}

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

}

最后将其添加到application.conf

http.path=/prefix/

它似乎有效,但我不知道如何将这个前缀添加到反向路线中......任何人都可以在那个部位上捏造它吗?

-

一些有用的链接

选中threaddocs