#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. Спасибо за предложение. В итоге я нашел источник для обратного прокси-сервера, а затем использовал ту же методологию в пользовательском методе