У меня есть простое приложение Play, в котором мне нужно проверить URL-адрес, который вызывается, и использовать соответствующую базу данных соответственно. Я знаю, что легко получить доступ к текущему URL-адресу контроллера, но для этого мне нужно получить доступ к нему в модели.Scala/Play: доступ к текущему URL-адресу в модели
Передача URL-адреса от контроллера до каждого вызова метода модели была бы слишком большой неудобства. Есть ли другой способ решить эту проблему?
Play Framework 2.2.1/Scala 2.10.3
UPDATE: Это мой основной пример
Controller (Application.scala
):
package controllers
import play.api._
import play.api.mvc._
import models.Data
object Application extends Controller {
def index = Action {
//Call to model method - model should somehow get the URL without it being passed as a param
val smth: String = Data.getSmth()
Ok(smth);
}
}
Модель (Data.scala
):
package models
object Data {
def getSmth: Option[String] = DB.withSession {
val db = //this is where I need the url to decide which database to use
sql"""SELECT #$db.smth FROM smthTable""".as[String].firstOption
}
}
Я не считаю возможным доступ к текущему URL-адресу в модели. Потому что модель не имеет ничего общего с http. Может быть, вы можете определить неявный параметр запроса в своем конструкторе модели. Но я не думаю, что это хороший идеал. – jilen
@jilen Как бы определить этот параметр в моем конструкторе модели? Мне все равно нужно передать его или получить к нему доступ. Неужели такая ситуация не должна быть необычной? – Caballero
'' 'case class Foo (val bar: Int, val baz: String) case object Foo { def apply (bar: Int) (неявный запрос: play.api.mvc.Request [_]) = новый Foo (bar, request.path) } '' 'что-то нравится, это действительно не очень хорошая идея. – jilen