在 play 1.x 中,您有 http.path 参数,它允许您设置要添加到每个路由的 url
我怎样才能在 play 2.0 中实现类似的东西?
在 Play 2.1 中,您可以使用以下选项执行此操作conf/application.conf
:
application.context="/your/prefix"
从 Play 2.4 开始调用这个属性play.http.context
(取自 Gman 的评论)。
我在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/
它似乎有效,但我无法找到如何将该前缀添加到反向路由......有人可以帮我解决这部分吗?
--
一些有用的链接