7

在 play 1.x 中,您有 http.path 参数,它允许您设置要添加到每个路由的 url

http.param

我怎样才能在 play 2.0 中实现类似的东西?

4

2 回答 2

30

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

application.context="/your/prefix"

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

于 2013-04-02T11:56:12.237 回答
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)
}

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

它似乎有效,但我无法找到如何将该前缀添加到反向路由......有人可以帮我解决这部分吗?

--

一些有用的链接

检查这个线程文档

于 2012-08-12T20:07:56.707 回答