Переопределение обратного маршрутизатора для игровых ресурсов

#playframework-2.0

#playframework-2.0

Вопрос:

Я работаю над игровым приложением и хочу переопределить контроллер обратного ресурса. Учитывая следующий код в page.scala.html:

 <link rel="stylesheet" href='@controllers.routes.Assets.at("stylesheet/main.css")'>
  

Я хотел бы переопределить контроллер обратного ресурса для обслуживания с другого хоста, чтобы при использовании приведенного выше в шаблонах переопределение делало что-то вроде этого:

 // read the "staticHost" environment variable, default to empty string
val staticHost = scala.util.Properties.envOrElse("staticHost","")

// if not set, then use the default reverse controller. else use the defined host
if (staticHost.isEmpty)
  super.at(file)
else
  staticHost   file
  

Возможно ли это вообще?

Решение

Я использовал пользовательский метод, который имитирует поведение обратного маршрутизатора:

 def reverseAt(file: String): Call = {
  val prefix = if (basepath.isEmpty) _prefix   { _defaultPrefix }   "assets/" else basepath

  (file: @unchecked) match {
    case (file) if file == "robots.txt" => Call("GET", prefix   "robots.txt")
    case (file) if true => Call("GET", prefix   implicitly[PathBindable[String]].unbind("file", file))

}
  

Ответ №1:

Поскольку вы на самом деле не будете выполнять маршрутизацию к удаленному хосту (т. Е. Не Будете обслуживать фактические ответы), на самом деле нет никаких причин возиться с контроллером маршрутов. Вы можете создать вспомогательный объект, который выполняет то же самое, что и обратный маршрутизатор ресурсов, вызывая фактический обратный маршрутизатор ресурсов, когда это необходимо.

 object Assets {
    val staticHost = scala.util.Properties.envOrElse("staticHost","")

    def at(path: String): String = {
        if (staticHost.isEmpty)
            controllers.routes.Assets.at(file).url
        else
            staticHost   file
    }

}
  

Комментарии:

1. привет, LimbSoup. Спасибо за предложение. В итоге я нашел источник для обратного прокси-сервера, а затем использовал ту же методологию в пользовательском методе